**
事务使用注意事项
**
声明式事务是基于spring AOP实现,这就要求在事务使用符合AOP的相应规范
所有的涉及数据库操作的类必须要发布对应的bean,可以在spring的配置文件中(组件web- inf/spring目录下)或者通过spring的注释进行发布(@controller、@service、@repository、 @component)。
所有数据库操作类的获取,如果是服务的通过@Autowired或者ServiceFactory.getInstance().getService()获取,如果是bo或者其他数据操作类,一律通过@Autowired或者ApplicationContextHolder.getInstance(this).getBean(),BizObjectFactory.getBizObject****获取,其他方式获取一律错误(也有其他的替代方法,出于好检查发现问题,只要求这一种获取bean)。
@Transactional 注解应该只被应用到 public 可见度的方法上。 如果你在 protected、private 或者package-visible 的方法上使@Transactional 注解,它也不会报错,但是这个被注解的方法将不会展示已配置的事务设置(xml使用方式除外),如果是static修饰也不会生效。
即使你满足以上有事务的情况,你通过注解或者类ApplicationContextHolder获取对应的数据库操作类(BO),并且对应的方法也有对应的事务注解,你仍然有可能是在没有事务情况下作数据库操作(所以方法间调用时this不要乱使用)。