はい、代替手段があります。を使用すると、呼び出されKeyGeneratorたものにアクセスMethodできるため、独自の種類のコンポジットを作成し、それに応じてリダイレクトできます。これを行う擬似コードは次のとおりです。
@MyKeyGenerator("myKeyGenerator1")
@Cacheable(cacheNames="cacheName1")
Foo method1(...) { ... }
@MyKeyGenerator("myKeyGenerator2")
@Cacheable(cacheNames="cacheName2")
Bar method2(...) { ... }
MyKeyGeneratorあなたの注釈です。keyGenerator次に、次のようなシングルを作成できます。
public class MyKeyGenerator extends DefaultKeyGenerator {
@Override
public Object generate(Object target, Method method,
Object... params) {
MyKeyGenerator myKeyGenerator =
method.getAnnotation(MyKeyGenerator.class);
if (myKeyGenerator != null) {
// read your annotation and invoke the proper
// key generator according to the value
} else {
super.generate(target, method, params);
}
}
}
デフォルトの代わりに使用CachingConfigurerして指定できます。MyKeyGenerator
注: いずれにせよ、Spring Framework 4 への更新はおそらく適切であり、他の多くの優れた機能を利用できます。ただ言って。