spring 使用 Dao 的 生成的代理 类别能转变成某种类型

来源:互联网 发布:飞机票图片制作软件 编辑:程序博客网 时间:2024/06/18 10:34

今天 在 做 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


碰到问题 不要慌乱,要认真 分析 仔细查找 ,答案很快就会出来。细心、耐心、信心。

                                                                   


原创粉丝点击