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 回答