Java开发-面试题-0024-什么是 Spring 的循环依赖,Spring是怎么解决的,三级缓存的作用有哪些

Java开发-面试题-0024-什么是 Spring 的循环依赖,Spring是怎么解决的,三级缓存的作用有哪些


更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

其他平台:CodeZeng1998好锅

1.什么是 Spring 的循环依赖

@Component
public class A {
   
    @Autowired
    private B b; 
}

@Component
public class B {
   
    @Autowired
    private A a; 
}

循环依赖:

  • 在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象
  • A需要B,B需要C,C需要A
  • A需要A

在Spring中,Bean的创建过程主要分为三个步骤:

  1. 实例化(Instantiation):创建Bean的实例。
  2. 依赖注入(Dependency Injection):为Bean的属性注入依赖。
  3. 初始化(Initialization):调用@PostConstruct等初始化方法。

如果没有三级缓存,Spring容器在实例化A时,会发现A依赖B,于是先去实例化B。但在实例化B的过程中,又会发现B依赖A,于是再次去实例化A,这时就会进入一个死循环。

2.Spring是怎么解决的循环依赖的

三级缓存解决循环依赖:

Spring 解决循环依赖是通过三级缓存,对应的三级缓存如下所示:

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
   
	// 一级缓存
	/** Cache of singleton objects: bean name to bean instance. */
	private final Map<String, Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值