javaee论坛

普通会员

225648

帖子

346

回复

360

积分

楼主
发表于 2019-10-30 11:14:09 | 查看: 260 | 回复: 0

创建一个自定义BeanDefinitionRegistryPostProcessor。

importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.config.ConfigurableListableBeanFactory;importorg.springframework.beans.factory.support.AbstractBeanDefinition;importorg.springframework.beans.factory.support.BeanDefinitionBuilder;importorg.springframework.beans.factory.support.BeanDefinitionRegistry;importorg.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;importorg.springframework.stereotype.Component;@ComponentpublicclassMyBeanDefinitionRegistryPostProcessorimplementsBeanDefinitionRegistryPostProcessor{@OverridepublicvoidpostProcessBeanFactory(ConfigurableListableBeanFactorybeanFactory)throwsBeansException{//TODOAuto-generatedmethodstubSystem.out.println("postProcessBeanFactory...bean的数量:"+beanFactory.getBeanDefinitionCount());}//BeanDefinitionRegistryBean定义信息的保存中心,以后BeanFactory就是按照BeanDefinitionRegistry里面保存的每一个bean定义信息创建bean实例;@OverridepublicvoidpostProcessBeanDefinitionRegistry(BeanDefinitionRegistryregistry)throwsBeansException{//TODOAuto-generatedmethodstubSystem.out.println("postProcessBeanDefinitionRegistry...bean的数量:"+registry.getBeanDefinitionCount());//RootBeanDefinitionbeanDefinition=newRootBeanDefinition(Blue.class);AbstractBeanDefinitionbeanDefinition=BeanDefinitionBuilder.rootBeanDefinition(Blue.class).getBeanDefinition();registry.registerBeanDefinition("hello",beanDefinition);}}

配置类、测试类

@Configuration@ComponentScan("com.demo")publicclassSpringConfig{}@Testpublicvoidtest(){AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext(SpringConfig.class);applicationContext.close();}

输出结果

postProcessBeanDefinitionRegistry...bean的数量:9postProcessBeanFactory...bean的数量:10MyBeanFactoryPostProcessor...postProcessBeanFactory...当前BeanFactory中有10个Bean[org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,springConfig,myBeanDefinitionRegistryPostProcessor,myBeanFactoryPostProcessor,hello]blue...constructor

可以发现postProcessBeanDefinitionRegistry方法在postProcessBeanFactory之前执行,因为在postProcessBeanDefinitionRegistry中注入一个Bean,所以到postProcessBeanFactory方法中已经多了一个Bean。


您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017