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,只需要简单的一行注解就能搞定。

你可能感兴趣的:(Spring应用)