扩展点:
BeanFactoryPostProcessor 构建 BeanFactory后调用,此时BeanFactory , BeanDefinition 已经解析完毕。
BeanPostProcessor 初始化 Bean 对象时调用,所有bean的构建都会调用这个接口的两个方法。两个方法参数传入的bean属性都已经注入完毕。
InitializingBean Bean 实例创建后,所有的属性注入完毕后调用。
定义bean时可以指定init-method 和 destory-method 方法
InstantiationAwareBeanPostProcessor bean包装类初始化时调用方法
DisposableBean Bean 实例销毁时调用
扩展点调用顺序:
1、调用 BeanFactoryPostProcessor 子类的 postProcessBeanFactory() 方法(工厂必须先创建),这里beanFactory 已经创建,beanDefinition已经解析完毕。
2、调用bean 的构造方法。属性没有初始化(使用的都是默认值),依赖没有注入。
3、调用 BeanPostProcessor.postProcessBeforeInitialization() 方法。(所有bean初始化都会调用)
4、调用 InstantiationAwareBeanPostProcessor.postProcessBeforeInitialization() 方法。(所有bean初始化都会调用)
5、调用bean 定义的 init-method 方法(具体到某个bean的初始化)。
6、如果bean 实现了 InitializingBean 接口,调用 InitializingBean.afterPropertiesSet() 方法(具体到某个bean的初始化)。
7、调用 BeanPostProcessor.postProcessAfterInitialization() 方法。(所有bean初始化都会调用)
8、调用 InstantiationAwareBeanPostProcessor.postProcessAfterInitialization() 方法。(所有bean初始化都会调用)
9、bean 销毁,先调用 destory-method 方法,如果bean实现了DisposableBean接口,再调用DisposableBean.destroy() 方法。
注意:如果使用 javaConfig @Bean注入的bean, bean销毁时会调用 public ovid close(){}, public void shutDown(){} 方法, 相当于这两个方法是默认的销毁实现
1、BeanFactoryPostProcessor
此接口只有一个方法:
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
所以就是使用ConfigurableListableBeanFactory 进行扩展。
扩展方式:
这个扩展的地方就是调用 ConfigurableListableBeanFactory 方法进行扩展。
ConfigurableListableBeanFactory 可以分析和修改、预初始化单例Bean,并且可以修改已有的Bean