3

由于某种原因,我无法构造番石榴缓存实例并将其公开为 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] 类型|#]

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

4

1 回答 1

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;
于 2012-08-06T14:29:11.060 回答