4 回答

TA貢獻1802條經(jīng)驗 獲得超4個贊
Spring@Transaction屬性在私有方法上工作嗎?
@Transactional
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { }}...Bean bean = (Bean)appContext.getBean("bean");bean.doStuff();

TA貢獻1804條經(jīng)驗 獲得超2個贊
@Transational
因為不能從另一個bean調用私有方法(例外是反射),所以它們的 @Transactional
注釋沒有被考慮在內。 如果該方法是公共的,但它是從同一個bean調用的,那么它也不會被考慮(只有在使用了Spring代理AOP(默認)時,這個語句才是正確的)。

TA貢獻1808條經(jīng)驗 獲得超4個贊
@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();
注意:在代理模式下(這是默認的),只有通過代理傳入的“外部”方法調用才會被截獲。這意味著“自調用”,即在目標對象中調用目標對象的其他方法的方法,即使被調用的方法被標記為在運行時也不會導致實際事務。 @Transactional
!
考慮使用AspectJ模式(請參見下面),如果您希望自己的調用也與事務一起包裝。在這種情況下,首先不會有代理;相反,目標類將被“編織”(即它的字節(jié)代碼將被修改),以便 @Transactional
任何方法上的運行時行為。
添加回答
舉報