我使用Spring 3.0和ehcache。我在bean的某些方法中添加了@Cacheable
注释。我将该bean注入其他bean,并在我的应用程序上下文xml文件中注册。应用程序在添加ehcache注释之前工作(我使用com.googlecode.ehcache-spring-annotations v 1.2.0),但在添加注释后,Spring无法正确注入包含注释的bean。我在日志文件中看到的错误是:
org.springframework.beans.ConversionNotSupportedException:无法将实现java.io.Serializable,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised'类型'$ Proxy67的属性值转换为必需类型' {my bean type}'for property'{property}'。
以下是我添加到应用程序上下文中以使ehcache正常工作的内容:
<context:annotation-config />
<context:component-scan base-package="{my root package}" />
<ehcache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
我认为配置没问题,因为首先我在加载ehcache.xml文件时遇到了一些问题,并且日志中存在相应的错误。解决问题后,我收到了上面的错误。似乎spring为我的bean创建了一个代理,它在内部调用ehcache的缓存逻辑,但是无法使该代理转换为bean类型。
答案 0 :(得分:2)
参见Spring(3.1)参考:第27. Cache Abstraction章
在您的配置中,您正在使用Interface Base Proxies。 所以使用Bean和缓存方法的Bean必须引用它的接口,而不是它的具体类。
或者您可以更改配置proxy-target-class="true"
以使用基于类的代理。