zoukankan      html  css  js  c++  java
  • Spring AOP报错处理 Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误

    【转】

    解决方法:

    http://forum.springsource.org/showthread.php?85016-IllegalArgumentException-with-ApplicationContextAware-Proxy

    在配置文件中加入proxy-target-class="true"

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

    或者:

    <aop:config proxy-target-class="true">

    现在我的配置文件如下:

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
        <!-- 配置事务管理器 -->
        <bean
            id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
            <property name="sessionFactory" >
                <ref local="sessionFactory" />
            </property>
        </bean>
        <!-- 配置哪些方法需要哪些事务 -->
        <tx:advice
            id="txadvice"
            transaction-manager="transactionManager" >
            <tx:attributes>
                <tx:method
                    name="create*"
                    propagation="REQUIRED" />
                <tx:method
                    name="delete*"
                    propagation="REQUIRED" />
                <tx:method
                    name="update*"
                    propagation="REQUIRED" />
                <tx:method name="read*"
                    read-only="true"
                    propagation="NOT_SUPPORTED"/>
                <tx:method
                    name="*"
                    read-only="true" />
            </tx:attributes>
        </tx:advice>
        <!-- pointcut切入点;advice,通知,即被织入的方法 。这儿是AOP-->
        <aop:config proxy-target-class="true">
            <aop:pointcut
                id="managerMethods"
                expression="execution (* org.ccnt.med.dao.TbTopicDao.*(..))" />
            <aop:pointcut
                id="managerMethods"
                expression="execution (* org.ccnt.med.dao.TbDisTopicDao.*(..))" />
            <aop:advisor
                advice-ref="txadvice"
                pointcut-ref="managerMethods" />
        </aop:config>

    解释:

    AOP使用的动态代理可以针对接口,也可以针对类。java的动态代理只能针对接口。

    在用Spring的AOP时,默认动态代理是针对接口的,而我用的是针对类的,所以要加上proxy-target-class="true"

  • 相关阅读:
    第一阶段SCRUM冲刺day07
    第一阶段SCRUM冲刺day06
    第一阶段SCRUM冲刺day05
    第一阶段SCRUM冲刺day04
    2020年第七周学习进度
    第一阶段SCRUM冲刺day03
    第一阶段SCRUM冲刺day02
    团队会议01
    2020年第六周学习进度
    TCP/IP Socket 的理解
  • 原文地址:https://www.cnblogs.com/dorothychai/p/3909813.html
Copyright © 2011-2022 走看看