Java Spring GuavaCacheManager缓存生成器RemovalListener类CastException可能性
我一直在使用SpringGuavacheManager在我的应用程序中进行缓存 春季版本4.3,番石榴版本20.0 我正在spring配置文件中初始化guava cache builder,并在缓存文件中使用可缓存注释 根据Guava CacheBuilder和Listener文件 警告:调用此方法后,不要继续使用此缓存 建造商参考;而是使用此方法返回的引用。在 运行时,它们指向同一实例,但仅返回 引用具有正确的泛型类型信息,以确保 类型安全。为了获得最佳效果,请使用标准方法链接习惯用法 如上面的类文档所示,配置生成器 并在一条语句中构建缓存。没有注意到这一点 通知可能导致缓存引发ClassCastException 在将来某个未定义的点进行操作 我在spring配置文件中使用了Removing listener返回的引用,但是对于下面的代码,是否仍有可能在将来的某个未定义点由缓存操作引发ClassCastException 弹簧配置文件Java Spring GuavaCacheManager缓存生成器RemovalListener类CastException可能性,java,spring,caching,guava,spring-cache,Java,Spring,Caching,Guava,Spring Cache,我一直在使用SpringGuavacheManager在我的应用程序中进行缓存 春季版本4.3,番石榴版本20.0 我正在spring配置文件中初始化guava cache builder,并在缓存文件中使用可缓存注释 根据Guava CacheBuilder和Listener文件 警告:调用此方法后,不要继续使用此缓存 建造商参考;而是使用此方法返回的引用。在 运行时,它们指向同一实例,但仅返回 引用具有正确的泛型类型信息,以确保 类型安全。为了获得最佳效果,请使用标准方法链接习惯用法 如上面
@configuration
@EnableCaching
public class SpringConfig {
@Bean
public CacheBuilder<Object, Object> cacheBuilder() {
CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.from("maximumSize=1000,expireAfterAccess=1d").removalListener(addRemovalListener());
return cacheBuilder;
}
@Autowired
private CacheBuilder<Object, Object> cacheBuilder;
@Bean
public CacheManager cacheManager() {
GuavaCacheManager cacheManager = new GuavaCacheManager();
cacheManager.setCacheBuilder(cacheBuilder);
cacheManager.setAllowNullValues(false);
return cacheManager;
}
private RemovalListener<Object, Object> addRemovalListener() {
return new RemovalListener<Object, Object>() {
public void onRemoval(RemovalNotification<Object, Object> removal) {
if(RemovalCause.EXPLICIT != removal.getCause()) {
try {
String key = (String) removal.getKey();
String val = (String) removal.getValue();
......
......
} catch (Exception e) {
logger.error("Cache RemovalListener Exception [{}]", e.getMessage(), e);
}
}
}
};
}
}
@Service
public class SpringCache {
@Autowired
private CacheManager cacheManager;
@Cacheable(cacheManager="cacheManager", key="#p0", cacheNames="cacheKeysMap", sync=true)
public String getKeyFromCache(String key) {
......
......
return value;
}
@CacheEvict(cacheManager="cacheManager", key="#p0", cacheNames="cacheKeysMap")
public void deleteFromCache(String key) {
}
}