
Bean 生命周期。
1.经历Aware把Bean需要的spring组件set给bean
2.BeanPostProccor 的postProcessBeforeInitialization
3. InitializingBean 的afterPropertiesSet
4.init-method
5,BeanPostProccor 的postProcessAfterInitialization
6,DisposableBean 的destroy方法
7.Destroy-Method
核心代码
AbstractApplicationContext -->refresh() 代码

1.准备BeanFactory
2.添加BeanFactoryPostProcessors bean工厂的后置处理
3.先调用BeanDefinitionRegistryPostProcessor->postProcessBeanDefinitionRegistryfa方法再调用工厂的BeanFactoryPostProcessors->后置处理
4.添加BeanPostProcessors 这里的Bean没有初始化
5.国际化
6.事件广播
7.钩子函数--->初始化特定上下文子类中的其他特殊bean。
8.注册事件监听器
9.实例化所有除懒加载的单例Bean (重点)
10.广播ApplicationContext初始化完成
注:invokeBeanFactoryPostProcessors(beanFactory) 做了多次循环找出BeanDefinitionRegistryPostProcessor对象并执行postProcessBeanDefinitionRegistry方法。找出BeanFactoryPostProcessor对象执行postProcessBeanFactory方法。
其中有一处可以优化内部做了多次循环可以改成一次循环:空间换时间的方案
BeanDefinitionRegistryPostProcessor的作用是把更多的bean注册到spring容器中。dubbo中ServiceAnnotationBeanPostProcessor是它的实现类。猜测:(兼容spring的框架都会有一个BeanDefinitionRegistryPostProcessor的实现类)