SpringBoot中使用@Import進入java類

一、Spring中的@Import 註解使用場景

@Import註解在Spring的源碼中使用特別深廣,值得對其使用場景進行研究與整理。

@Import註解通常可以引入如下類型的java類:

  1. 導入@Configuration註解的配置類;
  2. 導入ImportSelector的實現類;
  3. 導入ImportBeanDefinitionRegistrar的實現類;

二、@Configuration註解的配置類

@Import引入@Configuration註解配置的類,對應import的類都會加入並註冊爲spring容器中的bean:

@Import({ 類名.class , 類名.class... })
public class MyConfig{

}

 

三、導入ImportSelector的實現類

編寫ImportSelector的實現類,實現selectImports()方法,該方法的相關信息如下:

  • 參數AnnotationMetadata : AnnotationMetadata表示當前被@Import註解給標註的所有註解信息
  • 返回值String[]: 就是我們實際上要導入到容器中的組件全類名
public class MyImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        //return new String[]{"com.tang.Test.MyConfig"};
        //或者:
        return new String[]{類1.class.getName(), 類2.class.getName()};
        //說明:可以返回空數組但是不能返回null,否則會報空指針異常
    }
}

四、導入ImportBeanDefinitionRegistrar的實現類

編寫ImportBeanDefinitionRegistrar的實現類,實現registerBeanDefinitions()方法,該方法的相關信息如下:

  • 第一個參數:annotationMetadata 和之前的ImportSelector參數一樣都是表示當前被@Import註解給標註的所有註解信息
  • 第二個參數:表示用於註冊定義一個bean
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        //指定bean定義信息(包括bean的類型、作用域...)
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestBean.class);
        //註冊一個bean指定bean名字(id)
        beanDefinitionRegistry.registerBeanDefinition("testBean",rootBeanDefinition);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章