是的,有一个替代方案。使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 的更新可能无论如何都是有序的,您将从大量其他不错的功能中受益。只是说。