一、何谓BeanProcessor

  BeanPostProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码:

在这里我先简单解释一下其注释的含义:

  这个接口允许我们自定义修改新bean的一个实例,比如说:检查它们的接口或者将他们包装成代理对象等,ApplicationContexts能自动察觉到我们在BeanProcessor里对对象作出的改变,并在后来创建该对象时应用其对应的改变。

  这两个方法分别对应IOC容器对对象初始化前的操作和对象初始化后的操作

  下面我们来演示一个例子:

  StudentEntity:

运行得到如下结果:

Spring中的BeanPostProcessor

  我们可以看到在配置文件里定义的bean属性已经发生改变

二、SpringFramework中BeanPostProcessor经典应用场景

1.初始化BeanPostProcessor的源码

根据 ClassPathXmlApplicationContext的构造方法,我们可以看到该类初始化的时候会调用refresh():

[email protected]实现的代码跟踪

Spring中的BeanPostProcessor

 

注意AutowiredAnnotationBeanPostProcessor最终也是BeanPostProcessor的实现类,具体类的描述我就不再这里阐述了,大家可自行查看源码

 

3、SpringBoot中的定制化内嵌web容器

Spring中的BeanPostProcessor

 

这个EmbeddedServletContainerCustomizerBeanPostProcessor直接实现的就是BeanPostProcessor,该类下请关注如下方法:

 

 

Spring中的BeanPostProcessor

一、何谓BeanProcessor

  BeanPostProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码:

Spring中的BeanPostProcessor View Code

  在这里我先简单解释一下其注释的含义:

  这个接口允许我们自定义修改新bean的一个实例,比如说:检查它们的接口或者将他们包装成代理对象等,ApplicationContexts能自动察觉到我们在BeanProcessor里对对象作出的改变,并在后来创建该对象时应用其对应的改变。

  这两个方法分别对应IOC容器对对象初始化前的操作和对象初始化后的操作

  下面我们来演示一个例子:

  StudentEntity:

Spring中的BeanPostProcessor View Code

  

  TestBeanPostProcessor:

Spring中的BeanPostProcessor View Code

 

  Main方法:

Spring中的BeanPostProcessor View Code

  

  spring-config.xml关键代码:

Spring中的BeanPostProcessor View Code

  运行得到如下结果:

Spring中的BeanPostProcessor

  我们可以看到在配置文件里定义的bean属性已经发生改变

 

二、SpringFramework中BeanPostProcessor经典应用场景

1.初始化BeanPostProcessor的源码

根据 ClassPathXmlApplicationContext的构造方法,我们可以看到该类初始化的时候会调用refresh():

Spring中的BeanPostProcessor View Code

 

那么紧接着在AbstractApplicationContext中找到refresh()方法:

Spring中的BeanPostProcessor View Code

那么在这里Spring会进行一系列的初始化操作,我们请留意registerBeanPostProcessors(beanFactory);这句代码,追踪一下我们可以看到在该方法里注册Processor:

Spring中的BeanPostProcessor View Code

 

[email protected]实现的代码跟踪

Spring中的BeanPostProcessor

 

注意AutowiredAnnotationBeanPostProcessor最终也是BeanPostProcessor的实现类,具体类的描述我就不再这里阐述了,大家可自行查看源码

 

3、SpringBoot中的定制化内嵌web容器

Spring中的BeanPostProcessor

 

这个EmbeddedServletContainerCustomizerBeanPostProcessor直接实现的就是BeanPostProcessor,该类下请关注如下方法:

Spring中的BeanPostProcessor View Code

Spring中的BeanPostProcessor View Code

Spring中的BeanPostProcessor View Code

 

这里面有一个接口:EmbeddedServletContainerCustomizer 该接口有个实现类 ServerProperties 熟悉springboot外部化配置原理的同胞们其实一看便知

Spring中的BeanPostProcessor View Code

在这个类里我们可以找到customizeTomcat方法,大家自行看看喽,类图如下:

Spring中的BeanPostProcessor

 

相关文章: