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

百度抓取网站2023年6月疫情情况

百度抓取网站,2023年6月疫情情况,成都明思源室内设计学校,网站收录量引言 Spring事务一般我们采用注解实现,但是我们构造事务实现的时候常常没察觉失效的情况,本篇文章总结事务失效的六大情况,帮助我们深刻理解事务失效的边界概念 1. 方法自调用 这个主要是针对声明式事务的,经过前面的介绍&…

引言

Spring事务一般我们采用注解实现,但是我们构造事务实现的时候常常没察觉失效的情况,本篇文章总结事务失效的六大情况,帮助我们深刻理解事务失效的边界概念

1.  方法自调用

这个主要是针对声明式事务的,经过前面的介绍,小伙伴们其实也能够看出来,声明式事务底层其实就是 AOP,所以在声明式事务中,我们我们拿到的服务类并不是服务类本身,而是一个代理对象,在这个代理对象中的代理方法中,自动添加了事务的逻辑,所以如果我们直接方法自调用,没有经过这个代理对象,事务就会失效。

我写一段伪代码小伙伴们一起来看下:

public class UserService{@Transactionalpublic void sayHello(){}
}

此时,如果我们在 UserController 中注入 UserService,那么拿到的并不是 UserService 对象本身,而是通过动态代理为 UserService 生成的一个动态代理类,这个动态代理就类似下面这样(伪代码):

public class UserServiceProxy extends UserService{public void sayHello(){try{//开启事务//调用父类 sayHello//提交事务}catch(Exception e){//回滚事务}}
}

所以你最终调用的并不是 UserService 本身的方法,而是动态代理对象中的方法。

因此,如果存在这样的代码:

public class UserService{@Transactionalpublic void sayHello(){}public void useSayHello(){sayHello();}
}

在 useSayHello 中调用 sayHello 方法,sayHello 方法上虽然有事务注解,但是这里的事务不生效(因为调用的不是的动态代理对象中的 sayHello 方法,而是当前对象 this 的 sayHello 方法)。

 

2.  异常被捕获

如果我们在 sayHello 方法中将异常捕获了,那么动态代理类中的方法,就感知不知道目标方法发生异常了,自然也就不会自动处理事务回滚了。还是以前面的 UserServiceProxy 为例:

public class UserServiceProxy extends UserService{public void sayHello(){try{//开启事务//调用父类 sayHello//提交事务}catch(Exception e){//回滚事务}}
}

如果调用调用父类 sayHello的时候,sayHello 方法自动将异常捕获了,那么很明显,这里就不会进行异常回滚了。 

3. 方法非 public

这个算是 Spring 官方的一个强制要求了,声明式事务方法只能是 public,对于非 public 的方法如果想用声明式事务,那得上 AspectJ。

4. 非运行时异常

这个前面 5.3 小节介绍过了,默认情况下,只会捕获 RuntimeException,如果想扩大捕获范围,可以自行配置。

5. 不是 Spring Bean

基于 6.1 小节的理解,来看这个应该也很好懂。声明式事务主要是通过动态代理来处理事务的,如果你拿到手的 UserService 对象就是原原本本的 UserService(如果自己 new 了一个 UserService 就是这种情况),那么事务代码在哪里?没有事务处理的代码,事务自然不会生效。

声明式事务的核心,就是动态代理生成的那个对象,没有用到那个对象,事务就没戏。

6. 数据库不支持事务

这个没啥好说,数据库不支持,Spring 咋配都没用。

总结

Spring 事务常以注解实现,但存在多种可能导致失效的情况。方法自调用因未通过代理对象调用,事务逻辑未执行而失效;异常被捕获,动态代理无法感知异常,无法自动回滚;非 public 方法不符合 Spring 官方对声明式事务的要求而失效;默认仅捕获运行时异常,非此类异常会使事务失效,除非自行配置扩大捕获范围;若对象非 Spring Bean,无事务处理代码,事务不生效;当数据库本身不支持事务时,Spring 配置也无效 。

http://www.bjxfkj.com.cn/article/101303.html

相关文章:

  • 在哪个网站找学做包子网站外链是什么
  • 做投融资平台的网站都有哪些?小时seo
  • 婚恋网站建设方案网站交换链接友情链接的作用
  • 郑州网站建设找汉狮百度热搜榜怎么打开
  • office做的网站google ads 推广
  • 广州工商注册公司注册百度关键词优化技巧
  • 内江市建设信息网站360优化大师官方下载手机
  • WordPress删除插件链接长沙百家号seo
  • 线上购物平台免费seo推广计划
  • 网站建设公司推荐时代创信网站设计是做什么的
  • 小说做任务赚钱的网站seoul怎么读
  • 石龙镇网站仿做知识搜索引擎
  • 做网站多久太原百度推广开户
  • 不断加强门户网站建设老域名
  • 网站收录怎么弄推广网站的文案
  • 佛山智能模板建站新闻头条最新消息摘抄
  • 新手做网站视频知乎seo
  • 政协网站建设要求b2b平台排名
  • 个人域名备案网站名称网络优化
  • 佛山用户网站建站深圳搜索引擎优化seo
  • 网站开发相关外文书籍张北网站seo
  • 用ps做网站设计google官方版下载
  • 国家市场监督管理局官网优化大师免费版
  • 返利网 网站建设费用无锡seo网站管理
  • 网站的建设可以起到什么作用是什么原因推广怎么做
  • 龙岗这边哪里有教做网站的做网络推广工作怎么样
  • 高质量免费的网站长沙seo招聘
  • 网站开发 架构设计点击宝seo
  • 做外贸从哪些网站获取客户小程序商城制作一个需要多少钱
  • 网站怎么做图片动态图片不显示不出来的推广公司品牌