InitializingBean扩展点分析
上面两篇分别分析了扩展点aware、BreaProcessesor,接下来继续分析InitializingBean
代码示例
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
- 代码演示
- InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()
- InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()
- InstantiationAwareBeanPostProcessor.postProcessProperties()
- BeanPostProcessor.postProcessBeforeInitialization()
- InitializingBean.afterPropertiesSet()
- @Init-Method.initMethhod()
- BeanPostProcessor.postProcessAfterInstantiation()
@PostConstruct方法底层还是依赖于BeanPostProcess接口因此应该是在4-5之间进行执行
执行过程
- 调用方法
-
populateBean
-
initializeBean方法
InitializingBean接口是一个作用域为当前bean的接口,通过在初始化完成属性后进行执行
在initializeBean方法比较的重要分别执行了Awarea、BeanPostProcess的后置方法、invokeInitMethods方法
这三个扩展接口整体的执行流程就是
Instantiation -> BeanPostProcessor.beafore -> InitializingBean -> @Init-Method -> BeanPostProcessor.after
总结:
InitializingBean是作为初始化对象过程赋值完毕后执行的初始化方法