java-Spring @transactional与mode = aspectj行为异常

几天来,我一直在尝试使Spring事务在我的应用程序中正常运行,现在我无处可寻,只能向社区寻求帮助.在此先感谢您的帮助.

我的应用程序有特定的要求,我需要使用@Transactional注释一个受保护的重写方法,并从抽象父类中调用此方法.根据我的阅读,我不能使用代理,而必须使用mode = aspectj.

首先,一些配置:

<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

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

<context:load-time-weaver />

<bean name="ID_DataAccessor" class="dal.DataAccessor">
    <constructor-arg ref="dataSource" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost" />
           .....
    <property name="defaultAutoCommit" value="true" />
</bean>

如果在ID_DataAccessor中的方法上使用@Transactional批注,则该连接是事务性的(DataSourceUtils.isConnectionTransactional(c,dataSource)== true).不过,这对我来说毫无用处,因为一旦方法完成,事务就会提交.当我在调用DataAccessor中的方法的方法上使用@Trasnactional时,在DataAccessor中获得的连接(从DataSourceUtils.getConnection(dataSource))不是事务性的.此外,我在DataSourceTransactionManager.doGetTransaction()中放置了一个断点,只有在@Transactional批注直接位于获取连接的方法上时,才调用该断点.原谅我超载了该术语,但是@Transactional注释似乎并未在堆栈中传播.

我完全困惑.请帮忙!

上一篇:将自定义注释建议应用于Spring Data JPA存储库


下一篇:AOP与OOP有什么区别,谈谈AOP的原理是什么