笔记
Spring循环依赖
00 min
2024-1-9
2024-1-9
type
status
date
slug
summary
tags
category
icon
password
Spring框架可以通过三级缓存来解决循环依赖问题,具体实现方法如下:
  1. 创建Bean:当Spring容器创建一个Bean时,会将该Bean依赖的其他Bean都创建出来,并将创建出的Bean放入三级缓存中。
  1. 属性注入:在创建Bean时,Spring会对该Bean的属性进行注入,并从三级缓存中获取依赖的Bean。
  1. 初始化Bean:在注入完所有属性后,Spring会对该Bean进行初始化,包括调用init-method方法等操作。
  1. 返回Bean:初始化完成后,Spring会将该Bean放入单例缓存中,以便其他Bean进行依赖注入。
需要注意的是,如果存在循环依赖,Spring会通过提前暴露Bean的方式来解决循环依赖问题。具体实现方法如下:
  1. 创建Bean A:当Spring容器创建Bean A时,会将Bean A放入二级缓存中,并将Bean A的代理对象放入三级缓存中。
  1. 创建Bean B:当Spring容器创建Bean B时,会将Bean B放入二级缓存中,并检查Bean B的构造函数参数中是否有Bean A的代理对象。
  1. 提前暴露Bean A:如果Bean B的构造函数参数中存在Bean A的代理对象,Spring会将Bean A的代理对象提前暴露给Bean B,然后再创建Bean B。
  1. 属性注入:在Bean B创建完成后,Spring会对Bean B的属性进行注入,并从二级缓存中获取依赖的Bean。
  1. 初始化Bean:在注入完所有属性后,Spring会对Bean B进行初始化,包括调用init-method方法等操作。
  1. 返回Bean:初始化完成后,Spring会将Bean B放入单例缓存中,以便其他Bean进行依赖注入。
通过以上的方式,Spring可以解决循环依赖的问题,同时保证了Bean的单例性和唯一性。
 
上一篇
Mac开机声音
下一篇
彻底弄懂Redis的内存淘汰策略