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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值