谢谢你,snicoll,这很清楚,你真的帮了我很多:)
等待 Spring 4.1,我和我的团队决定使用自定义 @SharedCache 注释。
如果有人处于相同情况,这里有一些代码示例可以提供帮助。
该应用程序现在默认使用 AuthenticatedGenericKeyGenerator :
<cache:annotation-driven key-generator="keyGenerator"/>
<bean id="keyGenerator" class="your.package.AuthenticatedGenericKeyGenerator" />
AuthenticatedGenericKeyGenerator.java 详细信息:
public class AuthenticatedGenericKeyGenerator extends GenericKeyGenerator {
public AuthenticatedGenericKeyGenerator() {
super(...);
}
@Override
public Object generate(final Object target, final Method method, final Object... params) {
String cacheKey = super.generate(target, method, params).toString();
if(!method.isAnnotationPresent(SharedCache.class)) {
cacheKey = "user:" + some user information + "." + cacheKey;
}
return cacheKey;
}
}
我们自定义的@SharedCache 注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface SharedCache {
}
现在,如果我们想要共享缓存键而不是唯一的(例如使用用户 ID),我们只需使用额外的 @SharedCache 注释 @Cacheable 方法。