@Import 注解

@Import 注解可以普通類導入到 IoC容器中。

想要讓一個普通類接受 Spring 容器管理,有以下方法

  • 使用 @Bean 注解
  • 使用 @Controller @Service @Repository @Component 注解標注該類,然后再使用 @ComponentScan 掃描包
  • @Import 方法,即現在這種方式

Student 類

public class Student {
}

配置類

@Configuration
@Import(Student.class)
public class ImportConfig {

}

測試代碼

    @Test
    public void test7() {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ImportConfig.class);
        String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
        for (String name : beanDefinitionNames) {
            System.out.println(name);
        }
    }

觀察有沒有 Student 產生的 bean

結果


bean成功創建

以上導入普通的 Java 并將其聲明為一個 bean 功能在 4.2 之后才可以使用在 spring 4.2 以前,該注解,只能導入配置類,其功能與 <import /> 標簽類似


ImportSelector

ImportSelector : 返回需要導入的組件的全類名數組

MySelector 類

public class MySelector implements ImportSelector {
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"me.sjl.bean.Person"};
    }
}

配置類

@Configuration
@Import(MySelector.class)
public class ImportConfig {

}

測試代碼不變,直接看結果


Person 類被加載

ImportBeanDefinitionRegistrar

BeanDefinitionRegistrar

public class MyBeanDefinitionRegistrat implements ImportBeanDefinitionRegistrar {
    
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = new RootBeanDefinition(Person.class);
        registry.registerBeanDefinition("PERSON", beanDefinition);
    }
}

配置類

@Configuration
@Import(MyBeanDefinitionRegistrat.class)
public class ImportConfig {

}

測試代碼不變,直接看結果,看看是否有 PERSON 這個組件


PERSON 成功注冊
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.運營課程給我帶來最初的印象和思考 我在知道需要完成這么一次學習實踐,開始的我還是比較逃避的,通過三節課的課程學...
    時光聽得見閱讀 245評論 0 0
  • 三.9 楊睿曦 星期六我寫完作業,在姥姥家的菜園里捉到了一只小螳螂,我立刻找了一個瓶子,把它裝進瓶子養了...
    芳菲依舊趙麗芳閱讀 313評論 0 0