アノテーションインターフェース Cacheable
推奨メソッドが呼び出されるたびに、キャッシュ動作が適用され、指定された引数に対してメソッドがすでに呼び出されているかどうかがチェックされます。実用的なデフォルトでは、単にメソッドパラメーターを使用してキーを計算しますが、key()
属性を介して SpEL 式を提供するか、デフォルトの KeyGenerator
実装を置き換えることができます(keyGenerator()
を参照)。
計算されたキーの値がキャッシュに見つからない場合、ターゲットメソッドが呼び出され、戻り値が関連するキャッシュに保存されます。Optional
SE 戻り値の型は自動的にアンラップされることに注意してください。Optional
値が存在する場合、関連するキャッシュに保存されます。Optional
値が存在しない場合、null
は関連するキャッシュに保存されます。
このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。
- 導入:
- 3.1
- 作成者:
- Costin Leau, Phillip Webb, Stephane Nicoll, Sam Brannen
- 関連事項:
オプション要素のサマリー
修飾子と型オプションの要素説明デフォルトCacheResolver
がまだ設定されていない場合に作成するために使用するカスタムCacheManager
の Bean 名。StringSE[]
メソッド呼び出しの結果が保存されるキャッシュの名前。使用するカスタムCacheResolver
の Bean 名。メソッドキャッシュを条件付きにするために使用される Spring Expression Language(SpEL)式。キーを動的に計算するための Spring Expression Language(SpEL)式。使用するカスタムKeyGenerator
の Bean 名。boolean
複数のスレッドが同じキーの値をロードしようとしている場合は、基になるメソッドの呼び出しを同期します。メソッドのキャッシュを拒否するために使用される Spring 式言語(SpEL)式。StringSE[]
cacheNames()
のエイリアス。
要素の詳細
value
cacheNames()
のエイリアス。- デフォルト:
- {}
cacheNames
メソッド呼び出しの結果が保存されるキャッシュの名前。名前はターゲットキャッシュを決定するために使用され、通常は
CacheManager.getCache(java.lang.String)
に委譲される構成されたcacheResolver()
を介して解決されます。通常、これは単一のキャッシュ名になります。複数の名前が指定されている場合、定義の順序でキャッシュヒットについて参照され、すべての名前が新しくキャッシュされた同じ値に対する put/evict リクエストを受け取ります。
非同期 / リアクティブキャッシュアクセスでは、ターゲットキャッシュによっては、指定されたすべてのキャッシュが完全に参照されない場合があることに注意してください。後から決定されるキャッシュミス (たとえば、Redis の場合) の場合、それ以降のキャッシュは参照されなくなります。結果として、非同期キャッシュモード設定で複数のキャッシュ名を指定することは、前もって決定されるキャッシュミス (たとえば、Caffeine の場合) の場合にのみ意味を持ちます。
- 導入:
- 4.2
- 関連事項:
- デフォルト:
- {}
key
StringSE keyキーを動的に計算するための Spring Expression Language(SpEL)式。デフォルトは
""
です。つまり、カスタムkeyGenerator()
が構成されていない限り、すべてのメソッドパラメーターがキーと見なされます。SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
- それぞれ
method
SE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method
、#root.target
、#root.caches
。 - メソッド名(
#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。 - メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は
#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
- デフォルト:
- ""
- それぞれ
keyGenerator
StringSE keyGenerator使用するカスタムKeyGenerator
の Bean 名。key()
属性と相互に排他的です。- デフォルト:
- ""
cacheManager
StringSE cacheManagerデフォルトCacheResolver
がまだ設定されていない場合に作成するために使用するカスタムCacheManager
の Bean 名。cacheResolver()
属性と相互に排他的です。- デフォルト:
- ""
cacheResolver
StringSE cacheResolver使用するカスタムCacheResolver
の Bean 名。- デフォルト:
- ""
condition
StringSE conditionSpring メソッドのキャッシュを条件付きにするために使用される式言語 (SpEL) 式。条件がtrue
と評価された場合、結果をキャッシュします。デフォルトは
""
です。つまり、メソッドの結果は常にキャッシュされます。SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
- それぞれ
method
SE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method
、#root.target
、#root.caches
。 - メソッド名(
#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。 - メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は
#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
- デフォルト:
- ""
- それぞれ
unless
StringSE unlessSpring メソッドのキャッシュを拒否するために使用される式言語 (SpEL) 式。条件がtrue
と評価された場合、結果のキャッシュを拒否します。condition()
とは異なり、この式はメソッドが呼び出された後に評価されるため、result
を参照できます。デフォルトは
""
です。つまり、キャッシュが拒否されることはありません。SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。
- メソッド呼び出しの結果への参照については、
#result
。Optional
などのサポートされているラッパーの場合、#result
はラッパーではなく実際のオブジェクトを参照します - それぞれ
method
SE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method
、#root.target
、#root.caches
。 - メソッド名(
#root.methodName
)およびターゲットクラス(#root.targetClass
)のショートカットも利用できます。 - メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は
#root.args[1]
、#p1
、#a1
を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
- 導入:
- 3.2
- デフォルト:
- ""
- メソッド呼び出しの結果への参照については、
sync
boolean sync複数のスレッドが同じキーの値をロードしようとしている場合は、基になるメソッドの呼び出しを同期します。同期にはいくつかの制限があります。unless()
はサポートされていません- 指定できるキャッシュは 1 つだけです
- 他のキャッシュ関連の操作は組み合わせることができません
- 導入:
- 4.3
- 関連事項:
- デフォルト:
- false