public @interface Cacheable
Annotation indicating that the result of invoking a method (or all methods
in a class) can be cached.
Each time an advised method is invoked, caching behavior will be applied,
checking whether the method has been already invoked for the given arguments.
A sensible default simply uses the method parameters to compute the key, but
a SpEL expression can be provided via the key() attribute, or a custom
KeyGenerator implementation can
replace the default one (see keyGenerator()).
If no value is found in the cache for the computed key, the target method
will be invoked and the returned value stored in the associated cache. Note
that Java8's Optional return types are automatically handled and its
content is stored in the cache if present.
This annotation may be used as a meta-annotation to create custom
composed annotations with attribute overrides.
Costin Leau, Phillip Webb, Stephane Nicoll, Sam Brannen