【面试】spring中ioc加载过程
创始人
2024-06-02 05:57:14
0次
目录
- 一.加载过程
- 1.概念态-->定义态
- 2.定义态-->纯净态
- 3.纯净态-->成熟态
- 4.初始化
- 5.创建完成
一.加载过程
1.概念态–>定义态
- 1.实例化一个ApplicationContext的对象
- 2.调用bean工厂后置处理器(invokeBeanFactoryPostProcessors)完成扫描(如果类上有@Component注解)
- 3. 循环解析扫描出来的类信息
- 4.实例化一个BeanDefinition对象来存储解析出来的bean信息
- 5.把实例化好的beanDefinition对象统一存入BeanDefinitionMap以便之后实例化bean
- 6.再次调用其它bean工厂后置处理器
2.定义态–>纯净态
- 1.实例化之前spring要做验证,需要遍历BeanDefinitionMap,依次判断beanDefinition是否Lazy懒加载,是否prototype单多例,是否abstract抽象等等。还有国际化、注册BeanPostProcessor等等。调用finishBeanFactoryInitialization方法来实例化单例的Bean
- 2.验证完成后,spring在实例化一个bean之前要判断类的构造方法,spring实例化对象是通过构造方法反射实现的,需要知道是哪个构造方法
- 3. spring调用构造方法反射实例化出一个对象,该对象不是个完整的bean(需要注入属性、或者需要代理等等)
3.纯净态–>成熟态
- 1.spring处理合并后的beanDefinition
- 2.判断是否需要完成属性注入(DI),如果需要完成属性注入则开始注入属性
4.初始化
- 1.判断bean的类型回调Aware接口
- 2.调用生命周期回调方法
- 3. 如果需要代理(aop),则完成代理
5.创建完成
- 1.将bean放入单例池singletonObjects,bean完成后存到spring容器中。
相关内容