Spring BeanDefinitionRegistryPostProcessor最佳实践

  • 扩展点简述

Modify the application context's internal bean definition registry after its standard initialization. All regular bean definitions will have been loaded, but no beans will have been instantiated yet. This allows for adding further bean definitions before the next post-processing phase kicks in.

在标准初始化之后,修改应用程序上下文的内部bean定义注册表。 所有常规bean定义都将被加载,但尚未实例化任何bean。 这允许在下一个后处理阶段开始之前添加更多的bean定义。
对 BeanFactoryPostProcessor的扩展,允许在进行BeanFactoryPostProcessor检测之前注册其他Bean定义。

  • 扩展点的生命周期及扩展点的执行时机

属于Bean的初始化阶段扩展。所有常规bean定义都将被加载,但尚未实例化任何bean。
主要针对更改BeanDefinitionRegistry的扩展。
和 BeanFactoryPostProcessor属于同一执行时机,但早于BeanFactoryPostProcessor执行。

  • 扩展点的作用

比如对Bean注册表做更改,或者要添加更多的BeanDefinition,主要针对于Bean定义注册表的操作。

  • 扩展点实战

@Component
public class TestBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

    /**
     * 在标准初始化之后,修改应用程序上下文的内部 bean定义注册表。早于 postProcessBeanFactory
     * 执行时机:所有常规bean定义都将被加载,但尚未实例化任何bean。
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        System.out.println(registry.getBeanDefinitionCount());
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("我在postProcessBeanDefinitionRegistry后执行");
    }
}

更多Spring扩展请查看专题Spring开发笔记。

你可能感兴趣的:(Spring BeanDefinitionRegistryPostProcessor最佳实践)