当前位置: 首页 > 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.lryc.cn/news/479708.html

相关文章:

  • MySQ怎么使用语法介绍(详细)
  • 新能源汽车与公共充电桩布局
  • 【GIT】sourceTree的“当前分支“,“合并分支“与“检出分支的区别
  • 【Git】如何在 Git 中高效合并分支:完整指南
  • 成都睿明智科技有限公司抖音电商服务效果如何?
  • 收集的linux命令/Docker命令/git命令
  • DNS域名解析实验
  • Dify 本地部署指南
  • 15分钟学 Go 第 38 天:数据库基础
  • 【Python】图片处理
  • 面相小白的php反序列化漏洞原理剖析
  • 文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
  • 科研绘图系列:R语言组合堆积图(stacked plot)
  • YOLOv11及自研模型更新汇总
  • 系统安全架构
  • Qt(程序打包)
  • 牛客sql题目总结(1)
  • RocketMQ 自动注入消费者
  • RibbitMQ-安装
  • 非计算机背景但是想从事医学AI研究,需要掌握的编程语言|个人观点·24-11-08
  • 内置函数【MySQL】
  • RNA-seq 差异分析的点点滴滴(1)
  • Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式
  • day20-21之间的项目实战:若依ruoyi开发(可以跳过)
  • 双向链表及如何使用GLib的GList实现双向链表
  • ProCalun卡伦纯天然万用膏,全家的皮肤健康守护
  • FastAPI全方位分析:优劣尽显
  • 【rust】rust基础代码案例
  • 【深度学习】PromptFix:多功能AI修图
  • 2024最新AI绘画系统软件(Midjourney)+GPT4文档分析总结,多模态识图理解,AI文生图/图生图/混图生图(图像混合)