Spring中ImportSelector接口的作用

Spring中ImportSelector接口的作用

@Import()註解的作用:
當我們需要導入某個類到spring容器中去,但spring恰好無法掃描到這個類,而我們又無法修改這個類
(jar包形式)。我們就可以通過@import(xxx.class)是將這個類導入到spring容器中。

寫一個例子;

創建一個Test類:

//不加任何註解或配置bean.xml,僅僅表示一個外部類,與spring無關的。
public class Test {
}

接着創建MySelector類實現ImportSelector接口:

////不加任何註解或配置bean.xml,僅僅表示一個外部類,與spring無關的。
public class MySelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{Test.class.getName()};//數組中放入需要引入spring中的類名
    }
}

然後創建一個自定義註解 @EnableTest:

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(MySelector.class)//引入MySelector.class
public @interface EnableTest {
}

最後創建一個App用來測試:

@EnableTest//這裏加上EnableTest註解
public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(App.class);

        System.out.println(ac.getBean(Test.class));//測試是否能夠從容器中獲取到外部的Test的對象。
    }
}

測試結果肯定是能夠獲取到的!

爲什麼要使用ImportSelector?

ImportSelector在SpringBoot中大量被使用,各種@EnableXXX註解表示開啓XXX,這些註解基本上都是使用了@Import註解導入一個ImportSelector。
比如需要開啓Eureka,開啓Nacos,只需要簡單的一行註解就能搞定。

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