在春天注入番石榴缓存

时间:2012-08-05 15:55:39

标签: java spring inversion-of-control guava

由于某些原因,我无法构建一个番石榴缓存实例并将其作为Spring bean公开。

这是构造代码:

@Configuration
public class ProductRepositoryCache {

    @Bean
    public Cache<NameSearchKey,Collection<String>> nameSearchCache() {
        Cache<NameSearchKey,Collection<String>> result = CacheBuilder.newBuilder()
                .maximumSize(1024)
                .expireAfterAccess(0, TimeUnit.HOURS)
                .expireAfterWrite(6, TimeUnit.HOURS)
                .build();
        return  (Cache<NameSearchKey,Collection<String>>) result;
    }
}

然后使用它:

@Resource
Cache<NameSearchKey,Collection<String>> nameSearchCache;

但部署失败了:

  

注入资源依赖关系失败;嵌套异常是org.springframework.beans.factory.BeanNotOfRequiredTypeException:名为“nameSearchCache”的Bean必须是[com.google.common.cache.Cache]类型,但实际上是[com.google.common.cache.CacheBuilder]类型|#]

我相信我错过了一些简单但却找不到的东西。所以,我的问题是 - 我做错了什么?

1 个答案:

答案 0 :(得分:1)

真正的返回实例是com.google.common.cache.LocalCache.LocalManualCache,它是一个缓存。我认为你的代码是正确的,而且之前我做过同样的事情,它运作正常。

我建议查看包含以下内容的BeanNotOfRequiredTypeException

  

beanName - 请求的bean的名称

     

requiredType - 必需的

     

type actualType - 返回的实际类型,与预期类型

不匹配

然后您可以调试BeanNotOfRequiredTypeException实例以找到原因。

此外,您可以声明Bean显式名称,它可以避免一些错误。

@Bean(name = "thisCache")
public Cache<NameSearchKey,Collection<String>> nameSearchCache() {...}

@Resource(name = "thisCache")
Cache<NameSearchKey,Collection<String>> nameSearchCache;