Bean Post-Processor,可以理解为 "Bean创建过程后期的处理器"。它的整个工作区间,都处于Bean创建流程的后半段(实例化和属性注入之后)。
- postProcess**Before**Initialization:在Bean创建后期的初始化之前进行处理。
- postProcess**After**Initialization:在Bean创建后期的初始化之后进行处理
一个Bean的完整诞生过程:
- 实例化 (Instantiation)
- new BeanClass()
- 此时,我们得到了一个"空壳"对象,所有字段都是默认值(null, 0, false)。
- 属性注入 (Population)
- 处理 @Autowired, @Value 等。
- 把所有依赖的Bean和配置值都设置好。
- 此时,Bean的"内在"已经完整了,但可能还没准备好对外服务。
--- BeanPostProcessor 的工作区间开始 ---
- 前置处理 (postProcessBeforeInitialization)
- 这是 BeanPostProcessor 的第一次出手。
- 它发生在这个阶段,是在Bean实例化和属性注入之后,但在自定义初始化逻辑之前。
- 初始化 (Initialization)
- 调用 @PostConstruct 方法。
- 调用 InitializingBean.afterPropertiesSet()。
- 这是Bean自己的"岗前培训"。
- 后置处理 (postProcessAfterInitialization)
- 这是 BeanPostProcessor 的第二次出手,也是最后一次。
- 在Bean完成自己的初始化之后执行。
--- BeanPostProcessor 的工作区间结束 ---