Package io.quarkus.arc
Annotation Type WithCaching
-
@Target({PARAMETER,FIELD}) @Retention(RUNTIME) public @interface WithCaching
An injectedInstance
annotated with this annotation will cache the result of theProvider.get()
operation.The result is "computed" on the first call to
Provider.get()
and the same value is returned for all subsequent calls, even forDependent
beans.Example
class Producer { long nextLong = 0; int nextInt = 0; @Dependent @Produces Integer produceInt() { return nextInt++; } @Dependent @Produces Long produceLong() { return nextLong++; } } class Consumer { @Inject Instance<Long> longInstance; @WithCaching @Inject Instance<Integer> intInstance; // this method should always return true and Producer#produceInt() is only called once boolean pingInt() { return intInstance.get().equals(intInstance.get()); } // this method should always return false and Producer#produceLong() is always called twice boolean pingLong() { return longInstance.get().equals(longInstance.get()); } }
Cache Invalidation
It is possible to invalidate the cache via the
InjectableInstance.clearCache()
method.class Consumer { @WithCaching @Inject InjectableInstance<Integer> instance; int ping(boolean clearCache) { if (clearCache) { instance.clearCache(); } return instance.get(); } }
- See Also:
Instance
,InjectableInstance.clearCache()