私は上記の質問に対する簡単な答えをオンラインで探しましたが、見つかりませんでした。私は次のような方法を持っています:
@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }
Spring Framework4.2.1でEhCache2.10.0を使用していますが、このメソッドの出力は次のとおりです。
Adding cacheable method 'get' with attribute: [CacheableOperation[public Java.util.List com.example.DAO.get()] caches=[objects] | key='' ...
また(後のロギングで)
Computed cache key 'SimpleKey []' for operation ...
この状況で行う@Cacheableアノテーション想定は何ですか? (他の場所で示唆されているように)hashCodeによってキー設定されたキャッシュに各オブジェクトを配置しますか?または、リスト全体をそのままキャッシュにリストベースのhashCodeの下に配置しますか?
SpringDocはこれについて言及しています。
キャッシュは基本的にKey-Valueストアであるため、キャッシュされたメソッドを呼び出すたびに、キャッシュアクセスに適したキーに変換する必要があります。すぐに使用できるキャッシング抽象化では、次のアルゴリズムに基づく単純なKeyGeneratorが使用されます。
パラメータが指定されていない場合は、_
SimpleKey.EMPTY
_を返します。パラメータが1つだけ指定されている場合は、そのインスタンスを返します
複数のパラメーターが指定されている場合は、すべてのパラメーターのハッシュから計算されたキーを返します。
https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache
@Cacheable(cacheNames = "objects")
で注釈を付けるときは、キャッシュを識別できるキャッシュ名を付けます。メソッドには引数がないため、「オブジェクト」としてのcacheNameの場合、戻りオブジェクト(この場合は_List<Object>
_)が既にキャッシュされています。また、メソッドが呼び出されるたびに、cacheNameオブジェクトとキー値が「0」のキャッシュをチェックします。以前にキャッシュされた戻りオブジェクトがすでにある場合は、そのオブジェクトを返します。
更新:Spring 4+のパラメーターなしの_SimpleKey.EMPTY
_キー付き