SPRING配置文件报错,大家帮忙看一看,贴出几个重要的部分

时间:2021-01-16 14:15:42
    log中的报错信息的意思是说,创建一个名为“/register”BEAN的时候失败,
        报的错是: 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>

#3


看一下你的customerDao是否正确,包括大小写。 

#4


麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系

#5


引用 4 楼 sd8023580 的回复:
麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系


就是,在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改成小写再试试。

#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>

#3


看一下你的customerDao是否正确,包括大小写。 

#4


麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系

#5


引用 4 楼 sd8023580 的回复:
麻烦二楼的朋友说明一下,UserManagerImpl里面具体要写些什么内容好吗,我不太了解你这里的UserManagerImpl和UserDaoHibernate的关系


就是,在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改成小写再试试。

#9


我结贴散分了,感谢8楼和2楼的朋友,一个一针见血指出了问题,一个推荐了一个更好的写法。这个分数,我就各给10分,呵呵