由于某些原因,我无法构建一个番石榴缓存实例并将其作为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]类型|#]
我相信我错过了一些简单但却找不到的东西。所以,我的问题是 - 我做错了什么?
答案 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;