@Component
public class TestBean {
public void a() {
this.b();
}
@Transactional
public void b() {
System.out.println("methodB executing...");
}
}
a方法中調用b方法,b方法的事務是否生效!
不生效
原因是spring會爲TestBean生成一個“代理對象“,TestBeanProxy,只用調用TestBeanProxy b(),切面纔會生效
而a() 使用this.b()調用,就是使用了“代理目標對象“ TestBean的實例去調用的,不會生效。
如果才能生效呢
@Component
public class TestBean {
public void a() {
getProxy().b();
}
@Transactional
public void b() {
System.out.println("methodB executing...");
}
private TestBean getProxy(){
//注意 AopContext是存在ThreadLoacl中,線程切換上下文會丟失
TestBean testBean = (TestBean) AopContext.currentProxy();
}
}