当前位置: 首页 > wzjs >正文

做网站的介绍百度小说排行榜前十

做网站的介绍,百度小说排行榜前十,广西今日头条崇左最新消息,牛商网 做的p2p网站Transactional注解失效 在工作中,因为对该注解的原理了解不深导致出现bug,现进行记录。 场景复现: 在同一个类中,一个方法调用了另一个被Transactional注解修饰的方法,此时事务是不生效的。我们进行try-catch将异常进…

@Transactional注解失效

在工作中,因为对该注解的原理了解不深导致出现bug,现进行记录。
场景复现:
在同一个类中,一个方法调用了另一个被@Transactional注解修饰的方法,此时事务是不生效的。我们进行try-catch将异常进行捕捉,信息为:java.lang.IllegalStateException: Transaction synchronization is not active。它标识事务未起效。
接下类我们来看看为什么它不生效

1.SpringAop的原理

用平时最常用的AspectJ来举例,它是使用Cglib进行反射生成代理对象进行我们的切面处理。抽象的来说,这就相当于将我们的切面操作的代码直接移植到原有的类上面去,再生成一个新的类。达到我们想要的切面效果。

2.@Transactional注解

当我们进入Transactional发现它就是一个注解,没有任何实现方法,那就说明它肯定是被框架所检测,然后在框架中去具体实现它的功能。

3.举例
public class TransactionAop {public void doWithoutTransaction() {log.info("doWithoutTransaction this: {}", this.getClass().getName());doWithTransaction();}@Transactionalpublic void doWithTransaction() {try{TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {@Overridepublic void afterCommit() {log.info("doWithTransaction this: {}", this.getClass().getName());}});}catch (Exception e) {log.info(e.getMessage());}}
}

通过VisualVm只管的看到同一个类TransactionAop生成了两个对象

在这里插入图片描述

第一点:第一个对象都是通过Cglib生成的代理对象。第二个对象是Spring初始化时通过反射创建的原始对象。在初始化对象时,会去扫描整个类,标记那些方法被增强了。
第二代:Spring在调用一个对象的方法时,会去检查拦截器链。即使一个方法没有被增强,也会走一遍这个流程,去判断拦截器链为空,不会发生AOP事件。这里Spring做了缓存,方法只有在第一次被调用时会去检查,后续直接走缓存。

在调用doWithoutTransaction()时,通过match方法,检查这个方法是否被匹配上了。
那怎么匹配的,匹配的是什么东西呢?
在类AbstractFallbackTransactionAttributeSource中存在一个ConcurrentHashMap缓存,Spring会所有扫描到的被@Transiactional修饰的方法缓存起来。——Map<Object, TransactionAttribute> attributeCache

这里的Key是下面这个对象,所以具体的关系就是方法和类绑定起来成为一个Key

public final class MethodClassKey implements Comparable<MethodClassKey> {private final Method method;@Nullableprivate final Class<?> targetClass;}

可以看到在调用doWithoutTransaction时

在这里插入图片描述

在这里插入图片描述

没有匹配上,后续在找拦截器时就没有

而调用doWithTransaction时就匹配上了,可以看到他的事务等级为开启事务
在这里插入图片描述

4.那我就是需要让同一个类中的调用生效怎么办?
 // 获取当前代理对象,并调用事务方法
TransactionAop selfProxy = (TransactionAop) AopContext.currentProxy();
selfProxy.doWithTransaction();
http://www.dtcms.com/wzjs/336533.html

相关文章:

  • 许昌大成建设集团网站品牌运营具体做什么
  • 网站做外链好嘛女教师遭网课入侵直播录屏曝光视频
  • 创意设计师是做什么的德州seo优化
  • 创建网站公司 徐州清远疫情防控措施
  • 快速建设一个网站西安百度关键词排名服务
  • 网站提速国外友链买卖平台
  • 经常会更换网站域名请收藏口碑营销案例2021
  • 网站建设相关新闻北京网络优化
  • 网站制作的语言seo网站优化培训多少价格
  • 餐饮加盟网站建设广告优化师是做什么的
  • 个人 可以做网站备案吗百度热搜关键词
  • 大兴模版网站建设哪家好郑州seo询搜点网络效果佳
  • 2022加盟项目排行榜seo快速排名代理
  • 自建网站需要哪些技术教育培训报名
  • 智能客服人工客服西安优化排名推广
  • 小说网站建设多少钱营销方案范文
  • 网络商城网站怎样做关键词优化seo优化咨询
  • vs做的小型网站例推荐seo关键词优化
  • 网易官网建立个人网站想要网站导航推广
  • 呼和浩特网站建设价位steam交易链接在哪看
  • 宝山网站建设宝山优化大师电脑版官网
  • 虚拟机做局域网网站服务器配置seo排名点击软件推荐
  • 怎么自己改自己做的网站的图片张北网站seo
  • 那家公司做网站好网站建设公司排行榜
  • 人像摄影作品网站网站制作推广电话
  • 食品网络营销策划方案靖江seo要多少钱
  • 有谁知道教做空间的网站啊广州百度网站快速排名
  • 手机做网站过程什么网站推广比较好
  • 影响网站加载速度站长seo查询工具
  • 新手做网站俄罗斯搜索引擎浏览器