初始化Bean的时序图如下:
小结说明:
1、相同点:InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、@PostConstruct 都是在bean的属性注入完毕之后才执行,都可以用来进行bean的初始化动作
2、初始化执行顺序优先级由高到低:BeanPostProcessor的预初始化方法 > @PostConstruct方法 > InitializingBean 的(afterPropertiesSet方法) > BeanPostProcessor的后初始化方法
3、@PostConstruct 是通过 BeanPostProcessor 的预初始化方法执行的,略早于通过实现 InitializingBean 接口的方法 afterPropertiesSet()
使用注意:
如果要在当前类初始化的时候执行某段代码,且只执行一次,那么实现initializingBean接口。如果要在所有类实例化之后执行某段代码,则实现 BeanPostProcessor 接口重写后初始化方法