Spring的3级缓存和循环引用的明白

计算机软件开发 2024-9-17 06:30:04 25 0 来自 中国
此处是我自己的一个明白,防止以后忘记,如若谁人地方明白不对,接待指出。
一、配景

在我们写代码的过程中一样平常会利用 @Autowired 来注入别的的一个对象,但有些时间发生了循环依靠,但是我们的代码没有报错,这个是什么缘故原由呢?
二、前置知识

1、思量循环依靠的范例

此处我们思量 单例 + @Autowired 的循环依靠,不思量利用构造器注入或原型作用域的Bean的注入。
2、署理对象何时创建

1.png 留意:
正常情况下,即没有发生 循环依靠的时间,aop增强是在 bean 初始化完成之后的 BeanPostProcessor#postProcessAfterInitialization方法中,但是假如有循环依靠发生的话,就必要提前,在 getEarlyBeanReference中提前创建署理对象。
3、3级缓存中生存的是什么对象

缓存字段名缓存级别数据范例表明singletonObjects1Map<String, Object>生存的是完备的Bean,即可以利用的BeanearlySingletonObjects2Map<String, Object>生存的是半成品的Bean,即属性还没有设置,没有完成初始化工作singletonFactories3Map<String, ObjectFactory<?>>主要是天生Bean,然后放到二级缓存中留意:
ObjectFactory#getObject() 每调用一次,都会产生一个新的对象或返回旧对象,取决于是否存在署理等等。

2.png
4、从3级缓存中获取对象

org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)
3.png 5 Spring Bean的简化创建过程

1、实例化一个bean
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 16:48, Processed in 0.161803 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表