使用ehcache的Bean无法注入

时间:2011-10-28 10:34:54

标签: java spring ehcache

我使用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类型。

1 个答案:

答案 0 :(得分:2)

参见Spring(3.1)参考:第27. Cache Abstraction

在您的配置中,您正在使用Interface Base Proxies。 所以使用Bean和缓存方法的Bean必须引用它的接口,而不是它的具体类。

或者您可以更改配置proxy-target-class="true"以使用基于类的代理。