spring源码中的Bean初始化context的加载流程
一、spring 扩展接口
| 扩展接口 | 使用 |
|---|---|
| BeanFactoryPostProcessor | 处理所有bean前,对bean Factory进行预处理 |
| BeanDefinitionRegistryPostProcessor | 可以添加自定义bean |
| BeanPostProcessor | 在并初始化前后、后对bean进行处理 |
| ApplicationContextAware | 可以获得ApplicationContext及其中的bean |
| InitializingBean | 在bean创建完成,所有的属性注入完成执行 |
| DisposableBean | 在Bean销毁前执行 |
| ApplicationListener | 用来监听产生的应用事件 |
二、spring中ApplicationContext的默认加载流程

GetBean 的大概过程:
先试着从单例缓存对象里获取。
从父容器里取定义,有则由父容器创建。
如果是单例,则走单例对象的创建过程:在 spring 容器里单例对象和非单例对象的创建过程是一样的。都会调用父 类 AbstractAutowireCapableBeanFactory 的 createBean 方法。 不同的是单例对象只创建一次并且需要缓 存起来。 DefaultListableBeanFactory 的父类 DefaultSingletonBeanRegistry 提供了对单例对 象缓存等支持工作。所以是单例对象的话会调用 DefaultSingletonBeanRegistry 的 getSingleton 方法,它会间 接调用AbstractAutowireCapableBeanFactory 的 createBean 方法。
三、bean的作用域
默认是单例的
xml:配置
注解:@Scope(”prototype”) :prototype/singleton
四、总结
如果是 Prototype 多例则直接调用父类 AbstractAutowireCapableBeanFactory 的 createBean 方法
bean的创建
IOC就是一个bean的集合,bean的创建也由他负责,那么什么时候创建,怎么创建bean?
需要考虑bean的scope,一种singleton,一种prototype;还有是延迟加载属性
singleton就是只创建一次,会放到一个map中,以便下次使用;prototype就是每次都创建一个新的实例
bean的属性注入
也一样,什么时候注入,怎么注入
在创建bean之后,先找到需要注入的属性,也就是@Autowired注解的方法,或者属性
方法就需要调用,属性就需要修改值;
五、springboot自动配置流程理解

参考:https://www.cnblogs.com/trgl/p/7353782.html
六、spring bean相互依赖的解决方法:三级缓存
一级缓存:
二级缓存:


