如果我在Spring bean的私有方法上有一个@Transactional -annotation,该注释有什么作用吗?
如果@Transactional注释位于公共方法上,则它将起作用并打开一个事务。
@Transactional
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { } } ... Bean bean = (Bean)appContext.getBean("bean"); bean.doStuff();
问题不是私有的还是公共的,问题是:如何调用它以及你使用哪种AOP实现!
如果你使用(默认)Spring Proxy AOP,则@Transational仅当调用通过代理时,才会考虑Spring提供的所有AOP功能(如)。-如果从另一个 bean 调用带注释的方法,通常就是这种情况。
@Transational
这有两个含义:
恕我直言,你应该使用AspectJ模式而不是Spring Proxies来解决问题。而且AspectJ事务性方面甚至被编织成私有方法(已在Spring 3.0中进行了检查)。