Spring事务执行步骤:
- 判断当前执行的方法是否存在@Transactional注解;
- 如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接;
- 修改数据库连接的autocommit为false;
- 执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql;
- 执行完了之后如果没有出现异常,则提交,否则回滚。
Spring事务是否会失效的判断标准:
某个加了@Transactional注解的方法被调用时,要判断到底是不是直接通过【代理对象】调用的,如果是则事务会生效,如果不是则失效;
使用技巧:
若加了@Transactional注解的方法再调用加了@Transactional注解的方法时,可在类内注入本类的实例(spring会解决循环注入问题),通过注入的实例调用目标方法。