4 回答
TA贡献1802条经验 获得超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条经验 获得超2个赞
@Transational
因为不能从另一个bean调用私有方法(例外是反射),所以它们的 @Transactional
注释没有被考虑在内。 如果该方法是公共的,但它是从同一个bean调用的,那么它也不会被考虑(只有在使用了Spring代理AOP(默认)时,这个语句才是正确的)。
TA贡献1808条经验 获得超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模式(请参见下面),如果您希望自己的调用也与事务一起包装。在这种情况下,首先不会有代理;相反,目标类将被“编织”(即它的字节代码将被修改),以便 @Transactional
任何方法上的运行时行为。
添加回答
举报