SSM复习

Spring IOC理解

IOC控制翻转是一种设计思想,它将原本是在程序运行时才创建并管理的对象交给Spring框架创建和管理,控制权由应用代码转移到了 Spring 容器,控制权发生了反转。让开发者能够专注于业务逻辑层的开发,大大降低了模块之间的耦合度,提高开发效率和代码可维护性。

AOP理解

AOP就是面向切面编程,它是一种编程思想和方法,它将影响多个对象的公共行为抽离并封装,实现了与业务逻辑的解耦,减少重复代码,增强代码可维护性,提高开发效率。

Spring循环依赖问题是什么?Spring循环依赖如何解决?

Spring循环依赖问题是指在Spring容器中,两个或多个Bean之间存在直接的或间接的依赖关系,导致在创建和初始化这些Bean时形成了一个闭环,使得Spring容器无法正确地创建和初始化这些Bean。

  1. 构造器循环依赖:这种循环依赖发生在Bean之间的构造器相互引用。
  2. setter循环依赖:这种循环依赖发生在Bean的setter注入方法中。

Spring循环依赖的解决方式可以归纳为以下几点:

  1. 重新设计代码结构
  2. 使用@Lazy注解
  3. 使用setter注入代替构造器注入
  4. 分离接口和实现
  5. 利用Spring的三级缓存机制

三级缓存机制解决循环依赖:其中一级缓存用于存储完全初始化好的单例 Bean,二级缓存用于存储早期暴露的 Bean 实例,部分初始化的 Bean。三级缓存用于存储 Bean 工厂,主要用于创建 Bean 的代理对象。假设现在有两个对象 A 依赖 B,B 依赖 A。那么在A创建过程中发现需要属性 B,查找发现 B 还没有在一级缓存中,于是先将 A 放到三级缓存中,此时的 A 不完整,没有属性,但是可以引用。接下来就去实例化B。B 开始创建,此时发现需要A,于是B先查一级缓存寻找A,如果没有,再查二级缓存,如果还没有,再查三级缓存,找到了A,然后把三级缓存里面的这个A放到二级缓存里面,并删除三级缓存里面的A。B顺利初始化完毕,将自己放到一级缓存里面(此时B里面的A依然是创建中的状态)。然后回来接着创建A,此时B已经创建结束,可以直接从一级缓存里面拿到B,这样 A 就完成了创建,并将A放到一级缓存。

作用域是什么?

  1. singleton:单例作用域,所有对该Bean的请求都返回同一个Bean实例。
  2. prototype:原型作用域,每次请求时都创建一个新的Bean实例。
  3. request:请求作用域,每个HTTP请求都会创建一个新的Bean实例,该Bean实例仅在当前请求内有效。
  4.  session:会话作用域,每个HTTP会话都会创建一个新的Bean实例,该Bean实例仅在当前会话内有效。
  5. application:全局作用域,一个bean 定义对应于单个ServletContext 的生命周期。
  6. websocket: HTTP WebSocket 作用域,一个bean 定义对应于单个websocket 的生命周期。

Spring事务传播行为

Spring 事务传播行为(Transaction Propagation Behavior)定义了在事务方法被调用时,事务如何传播。Spring 提供了多种传播行为,允许开发者定义事务的边界和行为。这些传播行为通过@Transactional注解的propagation属性来配置。

1. REQUIRED(默认值)
  如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
2. REQUIRES_NEW
  总是创建一个新的事务。如果当前存在事务,则挂起当前事务。
3. SUPPORTS
  如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式继续执行。
4. NOT_SUPPORTED
  总是以非事务方式执行,如果当前存在事务,则挂起当前事务。
5. MANDATORY
  如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
6. NEVER
  总是以非事务方式执行,如果当前存在事务,则抛出异常。
7. NESTED
  如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
  注意:嵌套事务依赖于底层的事务管理器支持,如 JDBC 的Savepoints。

Spring事务回滚流程?

1.先做准备工作,解析各个方法上事务相关的属性,根据具体的属性来判断是否开启新事务。

2.当需要开启的时候,获取数据库连接,关闭自动提交功能,开启事务。

3.执行具体的sql逻辑操作

4.在操作的过程中,如果执行失败了,那么会通过completeTransactionAfterThrowing来完成事务的回滚操作,回滚具体的逻辑是通过doRollBack方法来实现的,实现的时候也是先获取连接对象,通过连接对象来回滚。
5.如果执行过程中,没有发生任何异常,那么会通过commitTransactionAfterReturning来完成事务的提交操作,提交的具体逻辑是通过doCommit方法来实现的,实现的时候也是先获取连接对象,通过连接对象提交。

6.当事务执行完毕之后需要清除相关的事务信息

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值