1.生命周期
- 启动容器
- 调用BeanFactoryPostProcessor的postProcessBeanFactory()方法进行工厂后处理
- getBean()调用某一个Bean
- 调用InstantiationAwareBeanPostProcessor 的postProcessBeforeInstantiation()方法。
- 实例化Bean(构造函数、工厂方法)
- 调用InstantiationAwareBeanPostProcessor 的postProcessAfterInstantiation()方法。
- 调用InstantiationAwareBeanPostProcessor 的postProcessPropertyValues()方法。
- 设置Bean的属性值
- 调用BeanNameAware的setBeanName()方法
- 调用BeanFactoryAware的setBeanFactory()方法
- 调用ApplicationContextAware的setApplicationContext()方法
- 调用BeanPostProcessor的postProcessBeforeInitialization()方法
- 调用InitializingBean的afterPropertiesSet()方法
- 调用init-method初始化方法
- 调用BeanPostProcessor的postProcessAfterInitialization()方法
- 如果singleton则缓存bean,如果prototype则返回bean。
- 如果singleton则在容器销毁的时候调用DisposableBean的destroy()方法
- 如果singleton则在容器销毁的时候调用destory-method方法
2.ApplicationContext中Bean的生命周期与BeanFactory中Bean的生命周期的区别在于:
- 如果bean实现了ApplicationContextAware接口,则调用该方法。
- ApplicationContext会使用反射机制自动识别Processor,而BeanFactory需要手动add
- BeanFactoryPostProcessor仅初始化一次,完成配置工作