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

用墨刀做视频网站家装品牌排行榜前十名

用墨刀做视频网站,家装品牌排行榜前十名,设计软件下载,哪有免费的简历模板Spring 的事务管理是其核心功能之一,通过 声明式事务 和 编程式事务 两种方式实现。其底层原理基于 AOP(面向切面编程) 和 动态代理,结合事务管理器(PlatformTransactionManager)控制事务边界,确…

Spring 的事务管理是其核心功能之一,通过 声明式事务编程式事务 两种方式实现。其底层原理基于 AOP(面向切面编程)动态代理,结合事务管理器(PlatformTransactionManager)控制事务边界,确保数据一致性。


🧠 一、事务实现的核心机制

1. 基于 AOP 的声明式事务

  • @Transactional 注解标记的方法会被 Spring AOP 拦截,生成代理对象。
  • 代理对象在方法执行前后插入事务逻辑(开启、提交、回滚)。

2. 事务的线程绑定

  • Spring 使用 ThreadLocal 将事务绑定到当前线程,确保同一事务内共享数据库连接。
  • 避免多线程下事务冲突,但需注意线程池或异步调用时的事务传播问题。

3. 事务管理器接口(PlatformTransactionManager)

  • 定义事务的基本操作:getTransaction()commit()rollback()
  • 常见实现:
    • DataSourceTransactionManager(单数据源)
    • JtaTransactionManager(分布式事务)
    • HibernateTransactionManager(Hibernate 集成)

🔄 二、事务处理流程(关键步骤)

1. 启用事务:@EnableTransactionManagement

  • 导入 ProxyTransactionManagementConfiguration,注册事务相关的切面和代理工厂。
  • 创建事务拦截器(TransactionInterceptor)和事务顾问(BeanFactoryTransactionAttributeSourceAdvisor)。

2. 生成代理对象

  • Spring 使用 JDK 动态代理(接口方法)或 CGLIB 代理(子类继承)生成目标类的代理。
  • 代理类拦截 @Transactional 方法,调用 TransactionInterceptor.invoke()

3. 事务拦截器(TransactionInterceptor)

  • 核心方法 invokeWithinTransaction()
    protected Object invokeWithinTransaction(Method method, Class<?> targetClass, final InvocationCallback invocation) {// 获取事务属性(传播行为、隔离级别等)TransactionAttribute txAttr = getTransactionAttributeSource().getTransactionAttribute(method, targetClass);// 获取事务管理器PlatformTransactionManager tm = determineTransactionManager(txAttr);// 开启事务TransactionStatus status = tm.getTransaction(txAttr);try {// 执行目标方法Object result = invocation.proceedWithInvocation();// 提交事务tm.commit(status);return result;} catch (Throwable ex) {// 回滚事务tm.rollback(status);throw ex;}
    }
    

📦 三、事务传播行为(Propagation Behavior)

行为说明
REQUIRED默认行为。当前有事务则加入,无事务则新建
REQUIRES_NEW总是新建事务,挂起已有事务
SUPPORTS支持当前事务,无事务则以非事务执行
NOT_SUPPORTED不支持事务,以非事务执行
MANDATORY必须存在事务,否则抛异常
NEVER不能存在事务,否则抛异常
NESTED嵌套事务,外层事务回滚会影响内层

🔐 四、事务隔离级别(Isolation Level)

级别脏读不可重复读幻读实现方式
DEFAULT由数据库决定---
READ_UNCOMMITTED最低隔离
READ_COMMITTEDOracle 默认
REPEATABLE_READMySQL 默认
SERIALIZABLE最高隔离

⚠️ 五、事务失效的常见场景(含源码级原因)

1. 方法非 public

  • Spring AOP 默认只拦截 public 方法(JDK 动态代理限制)。
  • 解决:改为 public 方法,或启用 AspectJ 代理。

2. 内部调用(Self-invocation)

  • 同一类中调用 @Transactional 方法时,代理失效。
    @Service
    public class MyService {public void outerMethod() {innerMethod(); // 事务失效!}@Transactionalpublic void innerMethod() { ... }
    }
    
  • 解决:通过注入自身 Bean 调用:
    @Autowired
    private MyService self;public void outerMethod() {self.innerMethod(); // 事务生效
    }
    

3. 未正确配置事务管理器

  • 缺少 PlatformTransactionManager Bean。
  • 解决:显式配置事务管理器(如 DataSourceTransactionManager)。

4. 异常未触发回滚

  • 默认仅对 RuntimeExceptionError 回滚。
  • 解决:指定 rollbackFor 属性:
    @Transactional(rollbackFor = Exception.class)
    public void method() throws Exception { ... }
    

🧱 六、事务与 AOP 的关系

组件作用
TransactionInterceptor事务切面,拦截方法并控制事务
TransactionAttributeSource解析 @Transactional 注解,获取事务属性
TransactionAspectSupport提供事务处理的基础支持
ProxyFactory创建动态代理(JDK/CGLIB)

📊 七、Spring Boot 中的事务自动装配

Spring Boot 通过 @EnableTransactionManagement 自动启用事务支持,并根据依赖自动配置事务管理器:

  • 如果存在单数据源 → 注册 DataSourceTransactionManager
  • 如果存在 JTA → 注册 JtaTransactionManager

配置示例(application.properties):

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update

✅ 总结

特性Spring 事务实现
实现方式AOP + 动态代理
事务边界ThreadLocal 管理线程上下文
传播行为7 种行为,控制事务嵌套关系
隔离级别5 种级别,控制并发数据一致性
失效场景方法非 public、内部调用、异常未触发回滚等
事务管理器PlatformTransactionManager 接口实现

http://www.dtcms.com/wzjs/795121.html

相关文章:

  • 效果图哪个网站好页面设计时最好
  • 阳泉网站开发天津建设银行招聘网站
  • 网站建设后台程序用什么语言wordpress 升级提示
  • 静态网站模板中英文环翠区网站建设
  • 漳州城乡建设局网站首页图片如何连接到wordpress
  • 国家对网站建设政策网站制作的总结与体会
  • 网站不被收录了wordpress发布站点
  • 网站建设广告语郑州seo询搜点网络效果佳
  • 免费教做面食的网站烟台企业自助建站系统
  • 设计师做单页的网站中英企业网站系统
  • 天津南开做网站做公司网站要钱吗
  • 做电脑网站用什么软件有哪些方面优化设计的答案
  • 优秀网站大全网站首页快照应该怎么
  • 网站建设一般用什么编程wordpress站点标题添加
  • 国外做连接器平台网站如何把物流做免费网站
  • 百度搜索 相关网站免费网站浏览器
  • 公司备案网站负责人是谁2020最有效的网络推广方式
  • 有没有做图的网站全网最低价购物平台
  • 做网站用什么版本系统网页制作下载链接怎么做
  • 郑州网站建设 推广百度不收录网站描述
  • 网站制作前期所需要准备手机网站欢迎页面设计
  • 阿里建站系统成都app开发价格表
  • 做自媒体网站需要注册什么公司wordpress页面缓慢
  • 石家庄网站外包安徽服饰网站建设
  • 漯河网站制作公司做seo的网站推广
  • 有什么做家纺的网站欧洲外贸平台
  • 建设企业网站公中铁中基建设集团网站
  • 网站建设要什么软件有哪些申请域名后 怎么把网站部署上去
  • 献县网站建设泰州网站制作方案定制
  • 手机网站开发设计北京建网