鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)/ Spring事務(wù)中的自調(diào)用中,被調(diào)用的方法上的@Transactional注解是

Spring事務(wù)中的自調(diào)用中,被調(diào)用的方法上的@Transactional注解是不是完全無(wú)效了?

譬如

public class ShopServiceImpl{
    
    @Transactional
    public void do1(){
        do2();
    }
    
    @Transactional
    public void do2(){
        ....
    }   
}

如上代碼,do1調(diào)用do2()時(shí),do2()上的@Transactional,其定義的傳播屬性譬如PROPAGATION_NOT_SUPPORTED,PROPAGATION_NEVER,或者timeout等是不是統(tǒng)統(tǒng)無(wú)效?

回答
編輯回答
鐧簞噯

對(duì), 如果需要加上事務(wù)的話, 可以試下通過(guò) AopContext.currentProxy() 獲取到代理對(duì)象, 然后再調(diào)用do2.

2017年6月21日 00:36
編輯回答
巴扎嘿

遇到過(guò)這種情況,當(dāng)時(shí)的做法是注入自身的代理對(duì)象,然后用這個(gè)對(duì)象去調(diào)方法就可以了

@Autowired
private ShopServiceImpl impl;

@Transactional
public void do1(){
    impl.do2();
}

2017年5月6日 23:24