Java Spring GuavaCacheManager缓存生成器RemovalListener类CastException可能性

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文件 警告:调用此方法后,不要继续使用此缓存 建造商参考;而是使用此方法返回的引用。在 运行时,它们指向同一实例,但仅返回 引用具有正确的泛型类型信息,以确保 类型安全。为了获得最佳效果,请使用标准方法链接习惯用法 如上面

我一直在使用SpringGuavacheManager在我的应用程序中进行缓存

春季版本4.3,番石榴版本20.0

我正在spring配置文件中初始化guava cache builder,并在缓存文件中使用可缓存注释

根据Guava CacheBuilder和Listener文件

警告:调用此方法后,不要继续使用此缓存 建造商参考;而是使用此方法返回的引用。在 运行时,它们指向同一实例,但仅返回 引用具有正确的泛型类型信息,以确保 类型安全。为了获得最佳效果,请使用标准方法链接习惯用法 如上面的类文档所示,配置生成器 并在一条语句中构建缓存。没有注意到这一点 通知可能导致缓存引发ClassCastException 在将来某个未定义的点进行操作

我在spring配置文件中使用了Removing listener返回的引用,但是对于下面的代码,是否仍有可能在将来的某个未定义点由缓存操作引发ClassCastException

弹簧配置文件

@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) {

}

}