zoukankan      html  css  js  c++  java
  • java.lang.ClassCastException: com.sun.proxy.$Proxy13 cannot be cast to sm.dao.UserDao

    在Spring中添加事物管理以后出现的问题

    源代码

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserDao userDao = (UserDao) applicationContext.getBean("UserDao");

     错误原因对于Spring AOP 采用两种代理方法,一种是常规JDK,一种是CGLIB,我的UserDao了一个接口IUserDao,当代理对象实现了至少一个接口时,默认使用JDK动态创建代理对象,当代理对象没有实现任何接口时,就会使用CGLIB方法。具体介绍文章 

    解决方法:

    因为基于JDK的代理是面向接口的,所以我们自己修改代码如下

       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserDao userDao = (IUserDao) applicationContext.getBean("UserDao");

    附上applicationContext.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <bean id="dataSoure" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
            <property name="url" value="jdbc:mysql://localhost:3306/sm"></property>
            <property name="username" value="root"></property>
            <property name="password" value="genji"></property>
    
        </bean>
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref bean="dataSoure"></ref>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.MySQL5Dialect
    
                    </prop>
                    <prop key="hibernate.current_session_context_class">
                        org.springframework.orm.hibernate4.SpringSessionContext
                    </prop>
    
    
                </props>
    
    
            </property>
            <property name="mappingResources">
    
    
                <list>
                    <value>sm/po/Studentinfo.hbm.xml</value>
                    <value>sm/po/User.hbm.xml</value>
                </list>
            </property>
    
    
        </bean>
        <bean id="UserDao" class="sm.dao.UserDao">
            <property name="sessionFactory">
                <ref bean="sessionFactory"></ref>
            </property>
    
    
        </bean>
        <bean id="SinfoDao" class="sm.dao.SinfoDao">
            <property name="sessionFactory">
                <ref bean="sessionFactory"></ref>
    
            </property>
    
    
        </bean>
    //就是在这里实现了事务代理
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven /> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add" read-only="true" propagation="REQUIRED" /> <tx:method name="read" propagation="REQUIRED" /> <tx:method name="del" propagation="REQUIRED" /> <tx:method name="mod" propagation="REQUIRED" /> <tx:method name="sameId" propagation="REQUIRED" /> <tx:method name="findUser" propagation="REQUIRED"/> <tx:method name="addUser" propagation="REQUIRED"></tx:method> </tx:attributes> </tx:advice> </beans>

     相关文章

    http://cheneyjuu.blog.163.com/blog/static/41917640201051042941159/

    对文章有任何疑问可以私信我的微博

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/nova-/p/4187658.html
Copyright © 2011-2022 走看看