目录
spring bean加载过程
spring ioc创建bean大体是两个步骤
1、容器启动
2、Bean创建阶段
1、容器启动
bean的注册,最终产物就是注册到BeanDefinationRegistry中的一个个BeanDefination。
通过以下5步进行预热,为后面Bean的实例化做准备。
1、配置对象元信息文件 <bean> <property /> </bean>
2、BeanDefination
把配置的元信息加载到内存,内存中表示这些配置元信息的方式就是BeanDefination
3、BeanDefinationReader
读配置的元数据信息,加载配置的元信息,将其转换为内存形式的BeanDefination
4、BeanDefinationRegistry
对BeanDefination进行注册,通过特定的bean定义的ID映射到相应的BeanDefination
5、BeanFactoryPostProcessor
配置文件的通配符${}数据转化为实际的数据值
2、Bean创建阶段
spring如何解决循环依赖
1、Spring是通过三级缓存来解决上述问题的
一级缓存: singletonObjects存储的是所有创建好了的单例Bean
二级缓存:earlySingletonObjects完成实例化,但是还未进行属性注入及初始化的对象
三级缓存:singletonFactories提前暴露的一个单例工厂,二级缓存中存储的就是从这个工厂中获取到的对象。
为什么要有三级缓存:
原文地址:Spring的Bean加载流程_张维鹏的博客-优快云博客_spring bean加载过程
循环依赖解决: