针对Bean对象初始化前后。针对Bean对象创建之后的处理操作。
SpringloC 核心流程
BeanDefinition--> 注册BeanDefinition -->BeanFactory --> BeanFactory的后置处理 --> 单例bean -->
AOP --》代理对象--> advice pointcut join point。
BeanPostProcessor 提供了一种扩展机制
自定义接口的实现 --》 注册到BeanFactory的 Map中
BeanDefinition->注册BeanDefinition->BeanFactory-> BeanFactory的后置处理->单例bean->
遍历上面的Map 执行相关的行为 -->
===) AOP
loC 和AOP的关系
有了loC 才有 AOP DI
BeanPostProcessor 是 Spring 框架提供的一个扩展接口,用于在 Spring 容器的 Bean 初始化前后执行一些自定义的逻辑操作,例如修改 Bean 属性值、动态代理、校验等等。它主要是在 Bean 的实例化、依赖注入、初始化等环节中介入,对 Bean 对象进行修改和处理。
在 Spring 框架启动时,容器会自动扫描实现了 BeanPostProcessor 接口的类,并将这些类注册到 BeanPostProcessor 链中,按照顺序依次执行。在 Bean 实例化完成后,Spring 容器会先执行 postProcessBeforeInitialization 方法,然后执行 postProcessAfterInitialization 方法。这两个方法的返回值是被处理过的 Bean 对象。
通常,我们可以利用 BeanPostProcessor 来完成一些常见的任务,如:
- Bean 属性值的验证和校验
- 注入一些运行时需要的依赖
- 实现对 Bean 属性的注入、修改、重置
- 实现对 Bean 的初始化前后进行某些操作,例如动态代理、AOP 等
需要注意的是,如果 BeanPostProcessor 的实现类本身依赖于 Spring 容器中的其他 Bean,那么需要保证其他 Bean 的依赖注入和初始化已经完成,否则会出现 NullPointer 等异常。