@Target(value={METHOD,TYPE})
@Retention(value=RUNTIME)
@Inherited
@Documented
public @interface Cacheable
推奨メソッドが呼び出されるたびに、キャッシュ動作が適用され、指定された引数に対してメソッドがすでに呼び出されているかどうかがチェックされます。実用的なデフォルトでは、単にメソッドパラメーターを使用してキーを計算しますが、key()
属性を介して SpEL 式を提供するか、デフォルトの KeyGenerator
実装を置き換えることができます(keyGenerator()
を参照)。
計算されたキーのキャッシュに値が見つからない場合、ターゲットメソッドが呼び出され、返された値が関連するキャッシュに保存されます。Java8 の Optional
戻り値の型は自動的に処理され、そのコンテンツは存在する場合はキャッシュに保存されることに注意してください。
このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。
CacheConfig
修飾子と型 | オプションの要素と説明 |
---|---|
java.lang.String | cacheManager デフォルト CacheResolver がまだ設定されていない場合に作成するために使用するカスタム CacheManager の Bean 名。 |
java.lang.String[] | cacheNames メソッド呼び出しの結果が保存されるキャッシュの名前。 |
java.lang.String | cacheResolver 使用するカスタム CacheResolver の Bean 名。 |
java.lang.String | condition メソッドキャッシュを条件付きにするために使用される Spring Expression Language(SpEL)式。 |
java.lang.String | key キーを動的に計算するための Spring Expression Language(SpEL)式。 |
java.lang.String | keyGenerator 使用するカスタム KeyGenerator の Bean 名。 |
boolean | sync 複数のスレッドが同じキーの値をロードしようとしている場合は、基になるメソッドの呼び出しを同期します。 |
java.lang.String | unless メソッドのキャッシュを拒否するために使用される Spring 式言語(SpEL)式。 |
java.lang.String[] | value cacheNames() のエイリアス。 |
@AliasFor(value="cacheNames") public abstract java.lang.String[] value
cacheNames()
のエイリアス。@AliasFor(value="value") public abstract java.lang.String[] cacheNames
名前を使用して、特定の Bean 定義の修飾子の値または Bean 名に一致するターゲットキャッシュ(1 つまたは複数)を決定できます。
value()
, CacheConfig.cacheNames()
public abstract java.lang.String key
デフォルトは ""
です。つまり、カスタム keyGenerator()
が構成されていない限り、すべてのメソッドパラメーターがキーと見なされます。
SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
method
、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の #root.method
、#root.target
、#root.caches
。#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。public abstract java.lang.String keyGenerator
KeyGenerator
の Bean 名。key()
属性と相互に排他的です。
public abstract java.lang.String cacheManager
CacheResolver
がまだ設定されていない場合に作成するために使用するカスタム CacheManager
の Bean 名。cacheResolver()
属性と相互に排他的です。
public abstract java.lang.String cacheResolver
CacheResolver
の Bean 名。public abstract java.lang.String condition
デフォルトは ""
です。つまり、メソッドの結果は常にキャッシュされます。
SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
method
、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の #root.method
、#root.target
、#root.caches
。#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。public abstract java.lang.String unless
condition()
とは異なり、この式はメソッドが呼び出された後に評価されるため、result
を参照できます。
デフォルトは ""
です。つまり、キャッシュが拒否されることはありません。
SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
#result
。Optional
などのサポートされているラッパーの場合、#result
はラッパーではなく実際のオブジェクトを参照します method
、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の #root.method
、#root.target
、#root.caches
。#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。public abstract boolean sync
unless()
はサポートされていません Cache.get(Object, Callable)