今天 在 做 spring 与 hibernate 集成时老是抱这个不能转换为指定类型的问题
Caused by: java.lang.IllegalStateException: Cannot convert value of type [$Proxy59 implementing com.com.mvc.dao.IBase,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.com.mvc.dao.IAccount] for property 'accountDao': no matching editors or conversion strategy found
折腾了一上午都没弄出来,后来仔细的分析了下 报的错 说是 $Proxy59 不能转变 成 IAccount 类型 $Proxy59 就是自己在 spring 的配置文件中配置 的 accountDao
<bean id="accountService" class="com.com.mvc.service.impl.AccountService">
<property name="accountDao">
<ref bean="accountDao"/>
</property>
</bean>
<bean id="accountDao" class="com.com.mvc.dao.impl.AccountDao">
<constructor-arg>
<value>com.com.mvc.entity.Account</value>
</constructor-arg>
<constructor-arg>
<ref bean="hibernateTemplate" />
</constructor-arg>
</bean>
spring 帮我们实例化 一个 对象 ,这个对 象是 用 jdk 的 动态代理机制 生成的代理对象
com.com.mvc.dao.impl.AccountDao -->$Proxy59
既然是类型 不能转换 那就是 子类与父类 或者 接口与实现有关
突然想到 AccountDao 是否 实现了IAccount 接口。
打开 AccountDao 一看 果然没有实现IAccount 接口
问题就出在这
AccountDao 如果 没有实现 IAccount 接口 ,怎么能把 AccountDao 实例 化的对象 赋值 到 IAccount 声明的变量 accountDao 上呢,当然 由Spring 根据
AccountDao 动态 生成 的对象 $Proxy59 也无法 赋值到 accountDao ( IAccount accountDao ).
解决方法 :在 AccountDao 后面加 上 implements IAccount
碰到问题 不要慌乱,要认真 分析 仔细查找 ,答案很快就会出来。细心、耐心、信心。