Spring源码中BeanPostProcessor的使用原理是怎样的?

2026-04-02 02:441阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计423个文字,预计阅读时间需要2分钟。

Spring源码中BeanPostProcessor的使用原理是怎样的?

Spring底层对BeanPostProcessor的使用及ApplicationContextAwareProcessor实现分析:本类帮助构建IOC容器,跟进ApplicationContextAwareProcessor,该处理器实际上就是判断我们的bean是否实现了相关接口。


Spring底层对BeanPostProcessor的使用

1,ApplicationContextAwareProcessor实现分析:

此类帮我们组建IOC容器,跟进ApplicationContextAwareProcessor我们发现, 这个后置处理器其实就是判断我们的bean有没有实现ApplicationContextAware接口,并处理相应的逻辑,其实所有的后置处理器原理均如此.

那么怎么组建呢? 只需要实现 ApplicationContextAware接口

步骤:

1>, 新建Plane.java(将Jeep.java复制一份即可)

classPlane implementsApplicationContextAware

分析一下ApplicationContextAwareProcessor类的方法

a,在创建Plane对象,还没初始化之前, 先判断是不是实现了ApplicationContextAware接口,

如果是的话就调用invokeAwareInterfaces方法, 并给里面注入值;

b,进入invokeAwareInterfaces()方法,判断是哪个aware, 如果是ApplicationContextAware, 就将当前的bean转成ApplicationContextAware类型, 调用setApplicationContext(), 把IOC容器注入到Plane里去;

c,用debug调用; 测试用例打断点测试

d,也可看debug调用栈来分析;

注: debug可以打在ApplicationContextAwareProcessor处理器类的applyBeanPostProcessorsBeforeInitialization()方法里, 方便调试, 当bean为Plane类型时,F5跟进看, 最终在 InvokeAwareInterfaces()方法里返回我们的IOC容器applicationContext.

2,BeanValidationPostProcess分析:数据校验,

看BeanPostProcessor接口实现CTRL+T

Spring源码中BeanPostProcessor的使用原理是怎样的?

了解即可,处理器的原理和其它处理器一致.

当对象创建完,给bean赋值后,在WEB用得特别多;把页面提交的值进行校验

3,InitDestroyAnnotationBeanPostProcessor

此处理器用来处理@PostConstruct, @PreDestroy, 怎么知道这两注解是前后开始调用的呢, 就是 InitDestroyAnnotationBeanPostProcessor这个处理的

以@PostConstruct为例, 为什么声明这个注解后就能找到初始化init方法呢?


总结: Spring底层对BeanPostProcessor的使用, 包括bean的赋值, 注入其它组件, 生命周期注解功能,@Async, 等等

本文共计423个文字,预计阅读时间需要2分钟。

Spring源码中BeanPostProcessor的使用原理是怎样的?

Spring底层对BeanPostProcessor的使用及ApplicationContextAwareProcessor实现分析:本类帮助构建IOC容器,跟进ApplicationContextAwareProcessor,该处理器实际上就是判断我们的bean是否实现了相关接口。


Spring底层对BeanPostProcessor的使用

1,ApplicationContextAwareProcessor实现分析:

此类帮我们组建IOC容器,跟进ApplicationContextAwareProcessor我们发现, 这个后置处理器其实就是判断我们的bean有没有实现ApplicationContextAware接口,并处理相应的逻辑,其实所有的后置处理器原理均如此.

那么怎么组建呢? 只需要实现 ApplicationContextAware接口

步骤:

1>, 新建Plane.java(将Jeep.java复制一份即可)

classPlane implementsApplicationContextAware

分析一下ApplicationContextAwareProcessor类的方法

a,在创建Plane对象,还没初始化之前, 先判断是不是实现了ApplicationContextAware接口,

如果是的话就调用invokeAwareInterfaces方法, 并给里面注入值;

b,进入invokeAwareInterfaces()方法,判断是哪个aware, 如果是ApplicationContextAware, 就将当前的bean转成ApplicationContextAware类型, 调用setApplicationContext(), 把IOC容器注入到Plane里去;

c,用debug调用; 测试用例打断点测试

d,也可看debug调用栈来分析;

注: debug可以打在ApplicationContextAwareProcessor处理器类的applyBeanPostProcessorsBeforeInitialization()方法里, 方便调试, 当bean为Plane类型时,F5跟进看, 最终在 InvokeAwareInterfaces()方法里返回我们的IOC容器applicationContext.

2,BeanValidationPostProcess分析:数据校验,

看BeanPostProcessor接口实现CTRL+T

Spring源码中BeanPostProcessor的使用原理是怎样的?

了解即可,处理器的原理和其它处理器一致.

当对象创建完,给bean赋值后,在WEB用得特别多;把页面提交的值进行校验

3,InitDestroyAnnotationBeanPostProcessor

此处理器用来处理@PostConstruct, @PreDestroy, 怎么知道这两注解是前后开始调用的呢, 就是 InitDestroyAnnotationBeanPostProcessor这个处理的

以@PostConstruct为例, 为什么声明这个注解后就能找到初始化init方法呢?


总结: Spring底层对BeanPostProcessor的使用, 包括bean的赋值, 注入其它组件, 生命周期注解功能,@Async, 等等