是否可以在 Spring 版本 3.1.x 中为缓存定义更多 KeyGenerator 类?
Is it possible to define more KeyGenerator classes for cache in Spring version 3.1.x?
我有一个配置 class,它实现了 CachingConfigurer
以定义具有特定密钥生成器的缓存管理器,但我应该为每个缓存使用不同的密钥生成器。
有一个选项形式 Spring 4.1
用于指定每个操作的密钥生成器:
@Cacheable(cacheNames="cacheName1", keyGenerator="myKeyGenerator1")
@Cacheable(cacheNames="cacheName2", keyGenerator="myKeyGenerator2")
我想知道 Spring 3.1?
中是否有任何 alternative
是的,还有一个选择。 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 的更新可能已经准备就绪,您将从大量其他不错的功能中受益。随便说说。
我有一个配置 class,它实现了 CachingConfigurer
以定义具有特定密钥生成器的缓存管理器,但我应该为每个缓存使用不同的密钥生成器。
有一个选项形式 Spring 4.1
用于指定每个操作的密钥生成器:
@Cacheable(cacheNames="cacheName1", keyGenerator="myKeyGenerator1")
@Cacheable(cacheNames="cacheName2", keyGenerator="myKeyGenerator2")
我想知道 Spring 3.1?
alternative
是的,还有一个选择。 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 的更新可能已经准备就绪,您将从大量其他不错的功能中受益。随便说说。