Spring@Transaction属性在私有方法上工作吗?如果我有对Springbean中的私有方法进行注释,注释有效果吗?如果@Transactional注释在公共方法上,它工作并打开事务。public class Bean {
public void doStuff() {
doPrivateStuff();
}
@Transactional
private void doPrivateStuff() {
}}...Bean bean = (Bean)appContext.getBean("bean");bean.doStuff();
3 回答
森林海
TA贡献2011条经验 获得超2个赞
@Transational
因为不能从另一个bean调用私有方法(例外是反射),所以它们的 @Transactional
注释没有被考虑在内。 如果该方法是公共的,但它是从同一个bean调用的,那么它也不会被考虑(只有在使用了Spring代理AOP(默认)时,这个语句才是正确的)。
HUWWW
TA贡献1874条经验 获得超12个赞
@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
任何方法上的运行时行为。
添加回答
举报
0/150
提交
取消