アノテーションインターフェース Cacheable
 推奨メソッドが呼び出されるたびに、キャッシュ動作が適用され、指定された引数に対してメソッドがすでに呼び出されているかどうかがチェックされます。実用的なデフォルトでは、単にメソッドパラメーターを使用してキーを計算しますが、key() 属性を介して SpEL 式を提供するか、デフォルトの KeyGenerator 実装を置き換えることができます(keyGenerator() を参照)。
 計算されたキーの値がキャッシュに見つからない場合、ターゲットメソッドが呼び出され、戻り値が関連するキャッシュに保存されます。OptionalSE 戻り値の型は自動的にアンラップされることに注意してください。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
- 関連事項:
 - デフォルト:
- {}
 
- keyStringSE keyキーを動的に計算するための Spring Expression Language(SpEL)式。- デフォルトは - ""です。つまり、カスタム- keyGenerator()が構成されていない限り、すべてのメソッドパラメーターがキーと見なされます。- SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。 - それぞれ methodSE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method、#root.target、#root.caches。
-  メソッド名(#root.methodName)およびターゲットクラス(#root.targetClass)のショートカットも利用できます。
- メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は #root.args[1]、#p1、#a1を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
 - デフォルト:
- ""
 
- それぞれ 
- keyGeneratorStringSE keyGenerator使用するカスタム- KeyGeneratorの Bean 名。- key()属性と相互に排他的です。- デフォルト:
- ""
 
- cacheManagerStringSE cacheManagerデフォルト- CacheResolverがまだ設定されていない場合に作成するために使用するカスタム- CacheManagerの Bean 名。- cacheResolver()属性と相互に排他的です。- デフォルト:
- ""
 
- cacheResolverStringSE cacheResolver使用するカスタム- CacheResolverの Bean 名。- デフォルト:
- ""
 
- conditionStringSE conditionSpring メソッドのキャッシュを条件付きにするために使用される式言語 (SpEL) 式。条件が- trueと評価された場合、結果をキャッシュします。- デフォルトは - ""です。つまり、メソッドの結果は常にキャッシュされます。- SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。 - それぞれ methodSE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method、#root.target、#root.caches。
-  メソッド名(#root.methodName)およびターゲットクラス(#root.targetClass)のショートカットも利用できます。
- メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は #root.args[1]、#p1、#a1を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
 - デフォルト:
- ""
 
- それぞれ 
- unlessStringSE unlessSpring メソッドのキャッシュを拒否するために使用される式言語 (SpEL) 式。条件が- trueと評価された場合、結果のキャッシュを拒否します。- condition()とは異なり、この式はメソッドが呼び出された後に評価されるため、- resultを参照できます。- デフォルトは - ""です。つまり、キャッシュが拒否されることはありません。- SpEL 式は、次のメタデータを提供する専用のコンテキストに対して評価します。 - メソッド呼び出しの結果への参照については、#result。Optionalなどのサポートされているラッパーの場合、#resultはラッパーではなく実際のオブジェクトを参照します
-  それぞれ methodSE、ターゲットオブジェクト、影響を受けるキャッシュへの参照用の#root.method、#root.target、#root.caches。
-  メソッド名(#root.methodName)およびターゲットクラス(#root.targetClass)のショートカットも利用できます。
- メソッドの引数はインデックスでアクセスできます。たとえば、2 番目の引数は #root.args[1]、#p1、#a1を介してアクセスできます。その情報が利用可能な場合、引数は名前でアクセスすることもできます。
 - 導入:
- 3.2
 - デフォルト:
- ""
 
- メソッド呼び出しの結果への参照については、
- syncboolean sync複数のスレッドが同じキーの値をロードしようとしている場合は、基になるメソッドの呼び出しを同期します。同期にはいくつかの制限があります。- unless()はサポートされていません
- 指定できるキャッシュは 1 つだけです
- 他のキャッシュ関連の操作は組み合わせることができません
 - 導入:
- 4.3
- 関連事項:
 - デフォルト:
- false