beanfactorypostprocessor解析 实例 原理 BeanDefinitionRegistryPostProcessor MergedBeanDefinitionPostProcessor

文章目录
  • Spring IoC容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义(配置元数据),并可以修改它。同时可以定义多个BeanFactoryPostProcessor,通过设置’order’属性来确定各个BeanFactoryPostProcessor执行顺序。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("MyBeanFactoryPostProcessor开始执行");
String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
if (name.equals("user")){
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name);
MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
propertyValues.add("name","Jack");
}
}
}
}

原理

  • 在刷新ioc容器的方法org.springframework.context.support.AbstractApplicationContext.refresh中执行,如下图:

BeanDefinitionRegistryPostProcessor

  • 后续更新。。。。

MergedBeanDefinitionPostProcessor

  • 后续更新

笔者有话说

  • 最近建了一个微信交流群,提供给大家一个交流的平台,扫描下方笔者的微信二维码,备注【交流】,我会把大家拉进群