3 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個贊
@Transational
因?yàn)椴荒軓牧硪粋€bean調(diào)用私有方法(例外是反射),所以它們的 @Transactional
注釋沒有被考慮在內(nèi)。 如果該方法是公共的,但它是從同一個bean調(diào)用的,那么它也不會被考慮(只有在使用了Spring代理AOP(默認(rèn))時,這個語句才是正確的)。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個贊
@Transactional
public class Bean { public void doStuff() { doTransactionStuff(); } @Transactional public void doTransactionStuff() { }}
Bean bean = (Bean)appContext.getBean("bean");bean.doTransactionStuff();
Bean bean = (Bean)appContext.getBean("bean");bean.doStuff();
Spring引用:使用@Transaction
注意:在代理模式下(這是默認(rèn)的),只有通過代理傳入的“外部”方法調(diào)用才會被截獲。這意味著“自調(diào)用”,即在目標(biāo)對象中調(diào)用目標(biāo)對象的其他方法的方法,即使被調(diào)用的方法被標(biāo)記為在運(yùn)行時也不會導(dǎo)致實(shí)際事務(wù)。 @Transactional
!
考慮使用AspectJ模式(請參見下面),如果您希望自己的調(diào)用也與事務(wù)一起包裝。在這種情況下,首先不會有代理;相反,目標(biāo)類將被“編織”(即它的字節(jié)代碼將被修改),以便 @Transactional
任何方法上的運(yùn)行時行為。
添加回答
舉報(bào)