Spring——bean的生命周期&bean的循环依赖问题

bean的生命周期

Spring中bean的生命周期,指的是单例bean创建到销毁的过程。

1. bean的和生命周期图

Spring 整个创建bean的过程,扩展点多,大致为以下这个样子。
在这里插入图片描述

bean的循环依赖问题

2.什么是循环依赖?

在这里插入图片描述
由上图可知,是先注入A?还是先注入B?所以这样就形成了循环依赖。

3.什么情况下的循环依赖可以解决?

依赖注入,在Spring中分为两种,一种是构造注入,一种是set注入。如果都是构造注入的话是没有办法解决的,看下表格。

依赖注入方式循环依赖是否被解决
均采用setter方法注入
均采用构造器注入
A中注入B的方式为setter方法,B中注入A的方式为构造器
B中注入A的方式为setter方法,A中注入B的方式为构造器

4.Spring 是如何解决循环依赖的?

要分为两种,一种是简单的循环依赖,一种是结合AOP的循环依赖。
Spring采用了三级缓存+set集合+AOP代理集合。

  1. 三级缓存
  • singletonObjects :一级缓存,单例池。存储的是所有创建好的单例bean。
  • earlySingletonObjects:二级缓存,完成实例化,但是还未进行属性注入及初始化的对象。不完整的bean,早期暴露的bean。
  • singletonFactories : 提前暴露的一个单例工厂,二级缓存中存储的就是从这个工厂中获取到对象。
  1. set 集合
  • singletonsCurrentlyInCreation:放正在创建的bean,用于判断是否产生循环依赖。bean在创建的时候,就会放入。
  1. AOP提交代理集合
  • earlyProxyReferences: 是否已经提前进行AOP【条件:Bean有循环依赖+需要AOP时】,否则进行正常的AOP逻辑

在这里插入图片描述
调用AOP的方法 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值