0

特定のキー ジェネレーターを使用してキャッシュ マネージャーを定義するために実装する構成クラスがありCachingConfigurerますが、キャッシュごとに異なるキー ジェネレーターを使用する必要があります。

Spring 4.1操作ごとにキー ジェネレータを指定するオプション フォームがあります。

@Cacheable(cacheNames="cacheName1", keyGenerator="myKeyGenerator1") 
@Cacheable(cacheNames="cacheName2", keyGenerator="myKeyGenerator2") 

私はこれalternativeのための何かがあるかどうか疑問に思っていますSpring 3.1?

4

1 に答える 1

2

はい、代替手段があります。を使用すると、呼び出され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 への更新はおそらく適切であり、他の多くの優れた機能を利用できます。ただ言って。

于 2015-03-26T08:09:23.880 に答える