2.注解所在的类是否注入spring容器中
3.注解所在方法是否为public修饰或者final(方法实现了接口是否为public,方法没有实现接口是否为final)
分析:这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
@Transactional的实现是基于动态代理的,private和final修饰的方法,不会被代理。
个人观点:在spring中动态代理分为jdk动态代理和cglib动态代理,jdk动态代理要求必须实现接口(所以方法必须是public的),但是cglib动态代理底层则是通过字节码生成被代理类的子类来实现的,这里要求被代理类必须能被继承(所以方法不能被final修饰--final可以限制类被继承)并且方法也只能是public,其他的权限修饰符在继承时访问权限会发生变化,例如protected的,在父类中为public,在子类中就为protected了。
4.所用数据源是否加载了事务管理器
5.是否发生了方法的自调用(同一个类中的A方法调用B方法)
分析:若同一类中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚。
6.当方法发生异常时,使用try catch捕获了异常,并且catch中没有抛出异常或者手动回滚。
分析:事务的回滚是方法发生异常,在aop的异常通知中进行拦截,回滚,如果方法中捕获了异常,是不会被aop的异常通知拦截到的。
如果使用了try catch捕获异常,需要在catch中抛出一个异常或者在catch中通过
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 设置手动回滚。
</div>
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like tool-clicked"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count">2</span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/qq_34707456">
<img src="https://profile.csdnimg.cn/D/8/3/3_qq_34707456" class="avatar_pic" username="qq_34707456">
<img src="https://g.csdnimg.cn/static/user-reg-year/1x/4.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_34707456" data-report-click="{"mod":"popu_379"}" target="_blank">风起尘落</a></span>
</div>
<div class="text"><span>发布了61 篇原创文章</span> · <span>获赞 74</span> · <span>访问量 5572</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=qq_34707456" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>