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…
本文来自博客园,作者:扎Zn了老Fe,转载请注明原文链接:https://www.cnblogs.com/itThinking/p/17771112.html