赞
踩
源于公司里一个程序员妹子最近在添加事物的时候遇到了些问题找我帮忙,说事物添加了怎么也不生效,下面直接用例子说明这种不生效的情况:
首先有个父类,在父类中有一个添加事物的方法,和一个没有事物的方法
public class TranClassA {
@Transactional
public void doExecute(){
//JDBC JDBC
methodB();
}
public void methodB(){}
}
有一个子类继承了TranClassA 类,并重写父类的methodB()方法
public class TranClassB extends TranClassA {
@Override
public void methodB(){
//JDBC JDBC
}
}
此时在调用methodB()时事务是不会生效的
Transactional事务是基于Spring的aop机制,在spring aop的用法中,只有代理的类才会被切入
通过代理方法调用methodB
首先确认spring的配置文件中已开启aop代理
<!-- 开启aop代理 -->
<aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true"/>
使用代理调用方法
public class TranClassA {
@Transactional
public void doExecute(){
//JDBC JDBC
//methodB();
((TranClassA)AopContext.currentProxy()).methodB();
}
public void methodB(){}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。