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

深圳网站建设服务代码做搜狗手机网站快速排

深圳网站建设服务代码,做搜狗手机网站快速排,网站开发后台技术,wordpress 更改头像spring中控制事务的方式有两种#xff1a;编程式事务和声明式事务#xff0c;今天我以两种事务出发#xff0c;对spring中实现事务的EnableTransactionManagement和Transaction两个注解的底层原理进行讨论。 一、编程式事务 什么是编程式事务#xff1f; 硬编码的方式实现…spring中控制事务的方式有两种编程式事务和声明式事务今天我以两种事务出发对spring中实现事务的EnableTransactionManagement和Transaction两个注解的底层原理进行讨论。 一、编程式事务 什么是编程式事务 硬编码的方式实现事务在代码中手动开始、提交和回滚事务 编程式事务实现思想是什么 配置PlatformTransactionManager事务管理器去控制事务配置TransactionDefinition设置事务属性配置TransactionTemplate控制事务 步骤和原理 1、定义数据源 2、定义一个PlatformTransactionManager 事务管理器指定数据源。控制事务的操作开始、提交、回滚 3、定义TransactionDefinition 事务属性可以配置事务属性信息 4、开启事务操作。通过调用getTransaction方法 补充ThreadLocal中存储了datasource和connection的映射 这样当我们开启事务的时候会创建一个数据库连接通过ThreadLocal保证线程的同步 5、执行业务操作 6、commit提交/rollback回滚事务 优缺点 优点 以在代码中精确地控制事务的起始点、提交点和回滚点实现更细粒度的事务管理。 缺点 代码侵入性编程式事务管理会将事务管理逻辑直接嵌入到业务代码中增加了代码的复杂度和维护成本使得业务逻辑与事务管理耦合在一起。重复性工作在多个业务方法中可能需要重复编写事务管理逻辑增加了代码冗余和维护工作量。 二、声明式事务 什么是声明式事务 通过配置的方式去管理事务可以是xml配置文件也可以使用spring提供的Transactional注解 声明式事务实现思想是什么 添加EnableTransactionManagement注解添加Transactional注解 步骤和原理 1、启用事务管理功能-配置类上加上EnableTransactionManagement注解 2、定义事务管理器 3、需要开启事务的目标接口/类/方法上添加Transaction注解 4、执行业务逻辑 5、启动spring容器获取bean执行业务逻辑 优缺点 优点 与业务逻辑分离声明式事务管理将事务管理逻辑从业务代码中分离出来使得业务逻辑更清晰降低了代码的耦合性。配置简单通过注解或XML配置可以简单地定义事务的传播行为、隔离级别等属性而无需在每个业务方法中编写重复的事务管理代码。易于维护由于事务管理逻辑集中在配置中易于维护和修改提高了代码的可读性和可维护性。提高一致性声明式事务管理可以确保在所有业务方法中都应用相同的事务管理策略提高了事务管理的一致性。 缺点 灵活性有限声明式事务管理的灵活性相对较低无法在运行时动态地改变事务管理策略有一定的局限性。RPC远程调用成功但是本地事务回滚了RPC调用无法回滚。并且事务中有远程调用会拉长整个事务导致本地事务的数据库连接一致被占用最后可能会导致数据库连接池耗尽 在阿里巴巴的开发手册中也明确标出我们用Transactional注解的时候要谨慎大家在业务场景中要谨慎使用哦 上面我已经对spring实现事务的两种方式分别进行了说明下面我们看看它的源码解开事务这个神秘面纱 三、源码分析 EnableTransactionManagement 作用是什么 开启spring自动管理事务。在spring容器启动的时候会拦截所有bean的创建判断当前bean中有没有用Transaction注解是不是需要让spring管理事务 判断规则 public方法上有没有用Transaction注解和bean的类相关的类/接口上有没有用Transaction注解 当满足规则之后会通过aop的方式创建代理并且在代理中添加一个TransactionInterceptor拦截器 注意Transaction注解在代理对象被创建并且方法被调用时生效 Transactional注解生效必须确保Spring能够为目标类创建代理对象并且方法通过代理对象调用 TransactionInterceptor拦截器的作用是什么 拦截Transaction方法在方法前后添加事务额外逻辑 如果代理中还有其他拦截器拦截器的顺序如何指定呢 通过order()方法修改事务拦截器的执行顺序 注意默认值是 LOWEST_PRECEDENCE Integer.MAX_VALUE,拦截器的执行顺序是order升序 int order() default Ordered.LOWEST_PRECEDENCE; Import(TransactionManagementConfigurationSelector.class)在这里的作用是什么 Import的作用是批量导入需要注册的类完成bean的注册 那Import导入了哪些类 通过点进去TransactionManagementConfigurationSelector我们发现里面有一个selectImports方法这个方法的返回值是一个字符串数组返回的字符串数组如果是正常的全限定类名才会被容器识别 通过查看selectImports方法源码我们发现return了两个类-AutoProxyRegistrar、ProxyTransactionManageMentConfiguration也就是说Import导入了这两个类 AutoProxyRegistrar启用spring aop功能创建代理ProxyTransactionManageMentConfiguration在aop中添加事务拦截器 ①、AutoProxyRegistrar 点进源码我们看registerBeanDefinitions这个方法看过spring容器启动流程的小伙伴会发现其中流程就会调用这个方法AopConfigUtils.registerAutoProxyCreatorIfNecessary(registry)作用是向spring容器注册一个自动代理创建器从而启用AOP代理的功能 在方法内部会导入InfrastructureAdvisorAutoProxyCreator类给spring 容器中注册了一个后置处理器-BeanPostProcessor拦截所有bean的创建并将符合规则的bean创建代理对类进行增强 在生命周期阶段创建bean的时候只有需要增强就会调用BeanPostProcessor的after进行增强 ②、ProxyTransactionManageMentConfiguration 配置类一般是提供加了Bean的一些方法。注册了一个事务拦截器TransactionInterceptor 总通过对上面两个导入的类的源码分析我们明确了他们的作用我们使用Transaction标注的bean会通过AutoProxyRegistrar去启用aop功能通过ProxyTransactionManagementConfiguration在aop中添加事务拦截器从而实现事务管理 如果有想要交流的内容欢迎在评论区进行留言如果这篇文档受到了您的喜欢那就留下你点赞收藏评论脚印支持一下博主~
http://www.zqtcl.cn/news/844433/

相关文章:

  • 如何作做网站网站建设需要掌握什么技术
  • 广州网站建设推广公司做网站怎么合并单元格
  • 网站建设策划书的编制怎样建网站域名
  • 公司做网站的费用怎么记账网站源码html
  • 网站流量数据东莞松山湖华为招聘信息
  • 跨境电商一站式服务平台wordpress用旧的编辑器
  • 上海外贸网站推广方法爱站关键词
  • 网站页面框架设计企业建设流程
  • 网站做留言板如何推广小程序商城
  • 金融社区类网站建设鞍山58同城招聘网
  • 网站搭建策划书wordpress 屏蔽插件更新
  • 做网上购物网站杭州房产网官方网站
  • 汕头市网站建设分站公司站长网站大全
  • c2c的网站名称和网址深圳设计公司办公室
  • 建设银行企业版网站做微网站平台
  • 北京企业网站建设电话长沙建设工程信息网
  • 大型综合门户网站开发扁平化个人网站
  • 怎么做代理人金沙网站长沙 网站运营
  • 商城网站开发的目的和意义鲜花类网站建设策划书范文
  • 什么类型的公司需要做建设网站的iis7 网站权限设置
  • 信誉好的商城网站建设火车头 wordpress 发布
  • 龙岩做网站抚顺 网站建设
  • wordpress怎么设置广告位青州网站优化
  • 网站的备案编号高端网站建设谷美
  • 佛山智能网站建设地址设计资溪做面包招聘的网站
  • 荆州网站建设多少钱国外网站设计理念
  • 网站备案成功后wordpress文字加框
  • 中小企业怎么优化网站西安网站建设求职简历
  • 网站开发者模式怎么打开商城网站建设特点有哪些
  • 网站登录按纽是灰色的做网站的前途怎么样