bean的生成过程
- spring启动的时候回确定要扫描的包路径,得到beanDefinition的set集合
- 和并beanDefinition
- 加载类,回去类加载器,优先返回当前线程中的类加载器
- 实例化前,beanDefinition加载成功后,开始实例化对象,实例化前,提供了一个扩展点,instantiationAwareBeanPostProcessor.postProcessBeforeInstantiation();
- 实例化,根据definition创建一个对象;工厂方法创建对象,推断构造对象
- beanDefinition的后置处理,扩展点是 mergedBeanDefinitionPostProcessor.postProcessMergeBeanDefinition();对BeanDefinition进行加工
- 实例化后,还有一个扩展点InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()
- 自动注入,spring的自动注入 Autowired
- 处理属性,比如@Value就是通过扩展点实现的
- 执行aware方法
- beanPostProcessor
1.InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()
2. 实例化
3. MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition()
4. InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()
5. 自动注入
6. InstantiationAwareBeanPostProcessor.postProcessProperties()
7. Aware对象
8. BeanPostProcessor.postProcessBeforeInitialization()
9. 初始化
10. BeanPostProcessor.postProcessAfterInitialization()
bean的销毁过程
- 在Bean创建过程中,在最后(初始化之后),有一个步骤会去判断当前创建的Bean是不是 DisposableBean:决定是否销毁
不恋尘世浮华,不写红尘纷扰