Spring扩展接口-BeanDefinitionRegistryPostProcessor

简介

在Spring容器初始化时,首先会读取应用程序中的配置文件,并解析出所有的Bean定义生成beanDefinition对象,并注册到容器中。 Spring提供了扩展接口BeanDefinitionRegistryPostProcessor,其中含有两个方法:

public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {

    void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
}
  • postProcessBeanDefinitionRegistry:入参是BeanDefinition注册器,允许用户自定义注册beanDefinition;
  • postProcessBeanFactory: 继承自BeanFactoryPostProcessor, 允许用户修改已经注册的beanDefinition。

用途示例

Spring内置处理器ConfigurationClassPostProcessor

处理spring定义的一些配置注解,例如@Configuration,@Import,@ComponentScan,@Bean等,并封装成BeanDefinition注册进容器中。

手动注册类示例

@Component
@Slf4j
public class MyBeanFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}

    /**
     * 动态注册Student的Bean信息
     *
     * @param registry
     * @throws BeansException
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

    BeanDefinition beanDefinition = BeanDefinitionBuilder.
                genericBeanDefinition(Student.class).
                addPropertyValue("id", "001").
                addPropertyValue("name", "tom001")
                .setInitMethodName("init")
                .setScope(BeanDefinition.SCOPE_SINGLETON)
                .getBeanDefinition();
        registry.registerBeanDefinition("student1", beanDefinition);
    }
}

更多信息请移步Spring专栏:www.yuque.com/mrhuang-ire…

posted @ 2023-10-12 10:07  扎Zn了老Fe  阅读(17)  评论(0编辑  收藏  举报  来源