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

湖南网站seo自己免费做网站有什么用

湖南网站seo,自己免费做网站有什么用,动态做网站,技术培训机构排名前十目录 ​编辑 一、方法内部调用 1、原理: 2、结论: 3、解决方法: 1. 增加一个service,把一个事务的方法移到新增加的service方法里面,然后进行注入再调用 2. 在自己类中注入自己 3. 通过AopContentent 二、访问权限不是pubilc 三、方法用final修饰 四、没有被spr…

 

目录

​编辑

一、方法内部调用

1、原理:

2、结论:

 3、解决方法:

1. 增加一个service,把一个事务的方法移到新增加的service方法里面,然后进行注入再调用

2. 在自己类中注入自己

3. 通过AopContentent

二、访问权限不是pubilc

三、方法用final修饰

四、没有被spring管理

五、数据库不支持事务

解决方案:使用InnoDB等支持事务的数据库引擎。

六、没有开启事务

七、错误的事务传播

八、自己捕获了异常

 1、 原因:

2.、解决方案:

        手动抛出异常或配置rollbackFor属性

九、手动抛出别的异常

十、自定义回滚异常

十一、多线程调用

十二、嵌套事务回滚过头

解决方法:


一、方法内部调用

在同一个类的service中,调用其他的事务方法

@Service
public class DemoService {@Transactionalpublic void query(Demo demo) {save(demo) ;}@Transactionalpublic void save(Demo demo) {}}

        可以看到,query方法调用了save的方法,由于spring的事务实现是因为aop生成代理,这样是直接调用了this对象,所以也不会生成事务。

1、原理:

        当spring容器启动的时候,发现有@EnableTransactionManagement注解,此时会拦截所有bean的创建,然后会扫描一下bean上是否有@Transaction注解(类、接口、或者方法上有这个注解都可以),如果有这个注解,spring会通过aop的方式给这个bean生成代理对象(代理对象中存在本类对象),代理对象中会增加一个拦截器,拦截器会拦截bean中public方法的执行,会在方法执行前启动事务,方法执行完毕之后提交或者回滚事务。

2、结论:

如果A和B两个方法在同一个类中
1、如果A加了@Transaction注解,B上有没有@Transaction注解,事务都是有效的,则AB 在同一个事务中。

2、如果A不加@Transaction注解,B上有没有@Transaction注解,事务都是无效的。

如果A和B两个方法不在同一个类中
1、如果A加了@Transaction注解,B上有没有@Transaction注解,事务都是有效的。

2、如果A不加@Transaction注解,B加了@Transaction注解,只有B是有事务的。

3、如果A不加@Transaction注解,B也不加@Transaction注解,A和B都是没有事务的。

简单理解:

        在同一个类中,只要A加了@Transaction注解,无论B加不加注解,AB都在同一个事务中,事务有效。

        如果AB在同一个类中,A不加注解,B加了注解,则事务失效;如果AB不同类,A不加注解,B加了注解,则只有B有事务。

原因分析:

        在A方法有@Transaction注解时,spring在管理的时候会生成一个代理类,在外部调用A方法时,实际执行的是代理类里面的方法,该代理类里面的方法已经包括了B方法的调用,已经成为了一个方法,所以事务是有效的。

 3、解决方法:


1. 增加一个service,把一个事务的方法移到新增加的service方法里面,然后进行注入再调用

@Service
public class DemoTwoService {@Transactionalpublic void save(Demo demo) {}
}@Service
public class DemoService {@AutowiredDemoTwoService demoTwoService;@Transactionalpublic  void query(Demo demo) {demoTwoService.save(demo);}
}

2. 在自己类中注入自己

@Service
public class DemoService {@AutowiredDemoService demoService;@Transactionalpublic  void query(Demo demo) {demoService.save(demo);}@Transactionalpublic void save(Demo demo) {}
}

由于这种写法基于spring的三级缓存不会导致,循环依赖的问题出现

3. 通过Aop

http://www.dtcms.com/a/442008.html

相关文章:

  • 理解Vivado的IP综合策略:“Out-of-Context Module Runs
  • CSS 预处理器:Sass的基本用法、核心特性
  • 【Ai改变生活】PotPlayer 史诗级更新!实时字幕生成+实时翻译!
  • 各大网站vip接口建设一个网站如何做推广
  • 深入理解ArrayList与LinkedList:Java集合框架核心对比(含实战案例+面试考点)
  • Gorm学习笔记 - 概述
  • wordpress 双分页北京朝阳区优化
  • 7-1 社会工程学攻击
  • 浪浪山 iOS 奇遇记:给 APP 裹上 Liquid Glass “琉璃罩”(下集)
  • Leetcode 215. 数组中的第K个最大元素 快速排序 / 堆排序
  • 网站建设排名奇艺地域邢台建设一个企业网站
  • 电子商务网站建设员网站建设维护文档
  • QT肝8天18--用户角色管理
  • 【开题答辩实录分享】以《基于Python的新能源汽车管理系统的设计与实现》为例进行答辩实录分享
  • springboot+vue智慧旅游管理小程序(源码+文档+调试+基础修改+答疑)
  • [创业之路-683]:“行业的分类”
  • MCI评估量表
  • 探索 Docker/K8s 部署 MySQL 的创新实践与优化技巧——高可用与性能调优进阶
  • Coze源码分析-资源库-编辑知识库-前端源码-核心组件
  • 搜索网站排名mj wordpress
  • 网站容量空间一般要多大做装修效果图的网站
  • MySQL-表的操作
  • C++架构全解析:从设计哲学到实战应用
  • wordpress 多级导航网络营销优化外包
  • 视频生成技术Deepfake
  • 【大语言模型 82】LoRA高级技巧:秩选择与初始化策略
  • 自己做的网站百度搜不到网站的空间是
  • Leetcode 3698. Split Array With Minimum Difference
  • mysql学习--日志查询
  • 北京做网站哪家强网站被k如何恢复