BeanDefinitionRegistryPostProcessor功能如下:
1、因为实现了BeanFactoryPostProcessor接口,所以可以修改bean定义中属性,具体操作可以参照https://blog.csdn.net/lsq_401/article/details/105508535
2、还可以动态的添加bean到spring容器中
而且它的执行会优先其他自定义的实现了该接口的BeanFactoryPostProcessor类,具体参考PostProcessorRegistrationDelegate
的invokeBeanFactoryPostProcessors方法,只保留部分代码:
public static void invokeBeanFactoryPostProcessors(
ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> beanFactoryPostProcessors) {
// Invoke BeanDefinitionRegistryPostProcessors first, if any.
Set<String> processedBeans = new HashSet<>();
if (beanFactory instanceof BeanDefinitionRegistry) {
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
List<BeanFactoryPostProcessor> regularPostProcessors = new ArrayList<>();
List<BeanDefinitionRegistryPostProcessor> registryProcessors = new ArrayList<>();
List<BeanDefinitionRegistryPostProcessor> currentRegistryProcessors = new ArrayList<>();
// First, invoke the BeanDefinitionRegistryPostProcessors that implement PriorityOrdered.
String[] postProcessorNames =
beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor