Spring框架学习---Spring的IoC高级特性之后置处理器

Spring框架学习—Spring的IoC高级特性之后置处理器(一般xxx器都是预留接口)

Spring提供了两种后处理bean的扩展接⼝,分别为 BeanPostProcessor针对bean对象的 和BeanFactoryPostProcessor针对bean工厂的,两者在使⽤上是有所区别的。

  1. 首先需要⼯⼚初始化(BeanFactory)—> 之后生成Bean对象
  2. 在BeanFactory初始化之后可以使用BeanFactoryPostProcessor进行后置处理做一些事情
  3. 在Bean对象实例化(并不是Bean的整个⽣命周期完成)之后可以使⽤BeanPostProcessor进⾏后置处理做⼀些事情
    注意:
    对象不一定是Springbean,但是Springbean一定是对象

SpringBean的⽣命周期

Spring框架学习---Spring的IoC高级特性之后置处理器_第1张图片
IoC:整个工厂+map+bean这个流程

实例化Bean之前的步骤

  1. 实例化Bean之前需要读取xml,这时候需要一个对象BeanDefinition
  2. BeanDefinition封装的是每个bean定义时候的配置信息(id,class,是否单例,property)
  3. 工厂产生之后,在生产实际的bean之前,需要把xml中bean的信息读取,封装成BeanDefinition对象
    Spring框架学习---Spring的IoC高级特性之后置处理器_第2张图片

BeanFactoryPostProcessor

BeanFactory级别的处理,是针对整个Bean的⼯⼚进⾏处理,典型应⽤:PropertyPlaceholderConfigurer(属性替换符),此接⼝只提供了⼀个⽅法

@FunctionalInterface
public interface BeanFactoryPostProcessor {
	void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

⽅法参数为ConfigurableListableBeanFactory,该参数类型定义了⼀些⽅法
Spring框架学习---Spring的IoC高级特性之后置处理器_第3张图片

  1. 其中有个⽅法名为getBeanDefinition的⽅法,我们可以根据此⽅法,找到我们定义bean 的BeanDefinition对象。然后我们可以对定义的属性进⾏修改,以下是BeanDefinition中的⽅法
    Spring框架学习---Spring的IoC高级特性之后置处理器_第4张图片
  2. ⽅法名字类似我们bean标签的属性,setBeanClassName对应bean标签中的class属性,所以当我们拿
    BeanDefinition对象时,我们可以⼿动修改bean标签中所定义的属性值。

BeanDefinition对象

我们在 XML 中定义的 bean标签,Spring 解析 bean 标签成为⼀个 JavaBean,这个JavaBean 就是 BeanDefinition

注意:

调⽤BeanFactoryPostProcessor⽅法时,这时候bean还没有实例化,此时bean刚被解析成BeanDefinition对象

你可能感兴趣的:(spring)