Spring擴展功能之BeanDefinitionRegistryPostProcessor

上節(jié)我們學習了Spring 的其中一個拓展BeanFactoryPostProcessor和相關源碼的簡單的解讀過程,本節(jié)我們 來學習另外一個拓展功能BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessor

不難發(fā)現,BeanDefinitionRegistryPostProcessor是繼承BeanFactoryPostProcessor

public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {

那它的作用很明顯了,這里就不在啰嗦,接著我們來看下它的簡單使用過程:

簡單使用

-1.編寫MyBeanDefinitionRegistryPostProcessor類實現BeanDefinitionRegistryPostProcessor接口

@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
    int count = beanDefinitionRegistry.getBeanDefinitionCount();
    System.out.println("MyBeanDefinitionRegistryPostProcessor...postProcessBeanDefinitionRegistry中的bean的個數為:"+count);
    //想注冊器中注冊我們自定義的bean 其中hello為bean的名字
    BeanDefinitionBuilder beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Black.class);
    AbstractBeanDefinition definition = beanDefinition.getBeanDefinition();
    beanDefinitionRegistry.registerBeanDefinition("hello",definition);
}

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    int count = configurableListableBeanFactory.getBeanDefinitionCount();
    System.out.println("MyBeanDefinitionRegistryPostProcessor...postProcessBeanFactory中的bean的個數為:"+count);

}

上述代碼中需要我們注意的一點是注解@Component,其中我們利用#postProcessBeanDefinitionRegistry(...)方法進行自定義bean的注冊功能

  • 2.編寫我們的 配置類
@Configuration
@ComponentScan(value = "com.cacmp.bean.expand")
public class ExpandConfig {

}
  • 3.測試類
@Test
public void testExpand(){
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExpandConfig.class);
    applicationContext.close();
}
  • 來看測試結果
image.png

會發(fā)現我們自己要注冊的bean【hello】也會被注冊進去,這就是BeanDefinitionRegistryPostProcessor的作用

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容