当前位置 : 主页 > 网络编程 > PHP >

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用

来源:互联网 收集:自由互联 发布时间:2023-09-06
Spring底层对BeanPostProcessor的使用 1,ApplicationContextAwareProcessor实现分析: 此类帮我们组建IOC容器,跟进ApplicationContextAwareProcessor我们发现, 这个后置处理器其实就是判断我们的bean有没有实现


 Spring底层对BeanPostProcessor的使用

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_赋值

1,ApplicationContextAwareProcessor实现分析:

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

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

步骤:

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

         class Plane implements ApplicationContextAware

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_初始化_02

分析一下ApplicationContextAwareProcessor类的方法

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_赋值_03

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

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

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

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

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_赋值_04

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

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

2,BeanValidationPostProcess分析:数据校验,

   看BeanPostProcessor接口实现CTRL+T

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_赋值_05

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

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

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_java_06

3,InitDestroyAnnotationBeanPostProcessor

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_java_07

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

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_初始化_08

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

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_java_09

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_java_10

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_java_11

           

Spring源码分析(八) - Spring底层对BeanPostProcessor的使用_初始化_12

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

 

上一篇:深入理解Docker中Container
下一篇:没有了
网友评论