spring aop 同一個bean中方法調用方法

@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();
    }
}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章