3 回答

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

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
@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();
注意:在代理模式下(這是默認(rèn)的),只有通過代理傳入的“外部”方法調(diào)用才會(huì)被截獲。這意味著“自調(diào)用”,即在目標(biāo)對(duì)象中調(diào)用目標(biāo)對(duì)象的其他方法的方法,即使被調(diào)用的方法被標(biāo)記為在運(yùn)行時(shí)也不會(huì)導(dǎo)致實(shí)際事務(wù)。 @Transactional
!
考慮使用AspectJ模式(請(qǐng)參見下面),如果您希望自己的調(diào)用也與事務(wù)一起包裝。在這種情況下,首先不會(huì)有代理;相反,目標(biāo)類將被“編織”(即它的字節(jié)代碼將被修改),以便 @Transactional
任何方法上的運(yùn)行時(shí)行為。
- 3 回答
- 0 關(guān)注
- 887 瀏覽
添加回答
舉報(bào)