报的错是: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.liufeng.bean.CustomerDAO] for property 'customerDao'
我把SPRING配置文件里几个重要的BEAN配置都贴出来给大家看一看:(属性sessionFactory配的是dataSource,dataSource里面配的是数据库的基本信息)
<bean id="CustomerDAO" class="com.liufeng.bean.CustomerDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性
这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>CustomerDAO</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的Interceptor -->
</list>
</property>
</bean>
<bean name="/register" class="com.yourcompany.struts.action.RegisterAction"
abstract="false" lazy-init="default" autowire="default" dependency-check="default">
<property name="customer">
<ref local="Customer" />
</property>
<property name="customerDao">
<ref local="CustomerDAO" />
</property>
</bean>
9 个解决方案
#1
自己顶自己一下,不要沉了,怎么配置个SPRING问题那么多呢
#2
应该对service层的实现类用代理! 事务的处理最好在service层里,而不要在dao里! 参照下面的配置吧!
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value> <!-- 这里的mgr是service层的实现类,而不是dao类 -->
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value> <!-- 这里的mgr是service层的实现类,而不是dao类 -->
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
#3
看一下你的customerDao是否正确,包括大小写。
#4
麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系
#5
就是,在UserManagerImpl里面调用UserDaoHibernate的方法去取数据。
取完数据后,执行业务逻辑代码,对数据进行处理。
二楼的朋友说的是将 对数据库的操作与业务逻辑部分分离开来。
#6
是要把UserDaoHibernate定义成接口,UserManagerImpl去实现这个接口是吧。麻烦确认一下,呵呵,是个学SPRING的新手,怕出错。
#7
我有点明白了,试一下看看
#8
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.liufeng.bean.CustomerDAO] for property 'customerDao'
根据这句话初步判定是在你的某个类里有setCustomerDao时出现问题,建议把spring配置文件里的<bean id="CustomerDAO" class="com.liufeng.bean.CustomerDAO"> 中CustomerDAO改成小写再试试。
根据这句话初步判定是在你的某个类里有setCustomerDao时出现问题,建议把spring配置文件里的<bean id="CustomerDAO" class="com.liufeng.bean.CustomerDAO"> 中CustomerDAO改成小写再试试。
#9
我结贴散分了,感谢8楼和2楼的朋友,一个一针见血指出了问题,一个推荐了一个更好的写法。这个分数,我就各给10分,呵呵
#1
自己顶自己一下,不要沉了,怎么配置个SPRING问题那么多呢
#2
应该对service层的实现类用代理! 事务的处理最好在service层里,而不要在dao里! 参照下面的配置吧!
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value> <!-- 这里的mgr是service层的实现类,而不是dao类 -->
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value> <!-- 这里的mgr是service层的实现类,而不是dao类 -->
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
#3
看一下你的customerDao是否正确,包括大小写。
#4
麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系
#5
就是,在UserManagerImpl里面调用UserDaoHibernate的方法去取数据。
取完数据后,执行业务逻辑代码,对数据进行处理。
二楼的朋友说的是将 对数据库的操作与业务逻辑部分分离开来。
#6
是要把UserDaoHibernate定义成接口,UserManagerImpl去实现这个接口是吧。麻烦确认一下,呵呵,是个学SPRING的新手,怕出错。
#7
我有点明白了,试一下看看
#8
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.liufeng.bean.CustomerDAO] for property 'customerDao'
根据这句话初步判定是在你的某个类里有setCustomerDao时出现问题,建议把spring配置文件里的<bean id="CustomerDAO" class="com.liufeng.bean.CustomerDAO"> 中CustomerDAO改成小写再试试。
根据这句话初步判定是在你的某个类里有setCustomerDao时出现问题,建议把spring配置文件里的<bean id="CustomerDAO" class="com.liufeng.bean.CustomerDAO"> 中CustomerDAO改成小写再试试。
#9
我结贴散分了,感谢8楼和2楼的朋友,一个一针见血指出了问题,一个推荐了一个更好的写法。这个分数,我就各给10分,呵呵