@Documented @Retention(value=RUNTIME) @Target(value=METHOD) public @interface Cacheable
For example, this load()
method loads some data from the network
and we want it to cache loaded data for 5 seconds (to avoid delays):
@Cacheable(lifetime = 5, unit = TimeUnit.SECONDS) String load(String resource) throws IOException { return "something"; }
You can cache them forever, which means that once calculated and cached value will never expire (may be a nice alternative to static initializers):
@Cacheable(forever = true) String load(String resource) throws IOException { return "something"; }
Since version 0.7.14 you can also annotate methods that should flush cache of the object.
Since 0.7.18 you can control when exactly flushing happens, with
Cacheable.FlushBefore
and Cacheable.FlushAfter
annotations
(Cacheable.Flush
is deprecated), for example:
public class Page { @Cacheable public String get() { // load data from external source, e.g. the network return data; } @Cacheable.FlushBefore public void set(String data) { // save data to the network } }
public abstract int lifetime
public abstract TimeUnit unit
The minimum unit you can use is a second. We simply can't cache for less than a second, because cache is being cleaned every second.
public abstract boolean forever
Copyright © 2012–2014 jcabi.com. All rights reserved.