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

面试题:Spring(一)

1. Spring框架中bean是单例么?

@Service
@Scope("singleton")
public class UserServiceImpl implements UserService {    }
  • singleton : bean在每个Spring IOC容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例。

2. Spring框架中的单例bean是线程安全的么?

9499a7ccd7184dc0838d83211d0f291c.png

不是线程安全的 Spring框架中有一个@Scope注解,默认的值就是singleton,单例的。 因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,是要考虑线程安全问题的,可以使用多例或者加锁来解决 

d1653975292b437c841df0c3e05ae6db.png 

3. AOP

Spring:AOP

AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

 

常见的AOP使用场景:

  1. 记录操作日志
  2. 缓存处理
  3. Spring中内置的事务处理 

1eb712f1e05c485888f69d201f3a2588.png4. 事务

Spring:事务 

Spring失效场景

cfb4169ba93e47f4a86fb3e71947c341.pngc15dcb04171b45e39a8143dfefc2f401.pngf073d5f6f2a94a53aa55dcce01ce4753.png

Spring中事务失效的场景有哪些 

  1. 异常捕获处理,自己处理了异常,没有抛出,解决:手动抛出
  2. 抛出检查异常,配置rollbackFor属性为Exception
  3. 非public方法导致的事务失效,改为public

5. bean的生命周期?

36515dd407b74723ba3762fbafbbc8b6.png

4f18a630578f4528bc86fb542e850123.png

6. 如何解决Spring中的循环引用?

99c9762bc5384d699e145df7757276ab.png Spring中的循环引用

  • 循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A
  • 循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖
  1. 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
  2. 二级缓存:缓存早期的bean对象(生命周期还没走完)
  3. 三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的

41c7fe0dfe3d46acbda14a8bc9ec0a7d.png 

构造方法出现循环依赖怎么解决?

当您在Spring的一个bean的依赖项上使用@Lazy注解时,Spring不会立即创建该依赖项的bean实例。相反,它会创建一个代理对象(在大多数情况下是JDK动态代理或CGLIB代理),该代理对象会在实际调用方法时懒加载真正的bean实例。

  1. 当Spring尝试创建BeanA的实例时,它注意到BeanA的构造器依赖于BeanB
  2. 由于BeanB被标记为@Lazy,Spring不会立即创建BeanB的实例。相反,它会为BeanB创建一个代理对象,并将其注入到BeanA中。
  3. 类似地,当Spring尝试创建BeanB的实例时,它注意到BeanB的构造器依赖于BeanA。但此时,BeanA的实例已经存在(尽管它包含一个BeanB的代理),因此Spring可以安全地创建BeanB的实例(实际上是BeanB的代理所指向的实例,但在这个上下文中,重要的是BeanB的构造器不再等待BeanA的完整实例)。
  4. BeanABeanB中的方法首次尝试访问对方(通过代理对象)时,Spring才会实际创建并初始化缺失的bean实例。

 


http://www.mrgr.cn/news/68523.html

相关文章:

  • C++类型推导decltype和auto
  • 基于MATLAB的人声音特征的识别和控制设计
  • 梧桐数据库聚合函数使用举例
  • 杨辉三角,洗牌算法
  • Swift 开发教程系列 - 第11章:内存管理和 ARC(Automatic Reference Counting)
  • std::copy
  • 技术复杂性导致估算不准确?5大对策
  • 鸿蒙进阶篇-网格布局 Grid/GridItem(二)
  • clickhouse自增id的处理
  • Nginx独立项目相关配置说明
  • 时间管理应用(可复制源码)
  • uniapp 整合 OpenLayers - 测距测面
  • Linux的基本指令(一)
  • Vue 组件通信-自定义事件(七)
  • AI芯片:推动高性能计算场景的关键力量
  • etherlab更新了一版IGH1.6.5
  • LeetCode 234.回文链表
  • 【9695】基于springboot+vue的学生就业管理系统
  • 全面升级的“新清影”,给AI生成视频带来了哪些新玩法?
  • 场景解决方案丨迎战电商大促,企业管理跟踪驾驶舱助力中小企业打赢决胜之战
  • 数据中心类DataCenter(一)
  • Pytorch基本语法
  • 五款小众办公助手
  • 设计模式-六个基本原则之一-单一职责原则 + 案例
  • Linux:git的了解和基础使用(保姆级教程)
  • 如何下载西瓜视频没有水印