简易扩展ImportSelector接口

一、写一个@Configuration

@Configuration
@Service
public class CarConfiguration {

    @Bean
    public Benz getBenz() {
        return new Benz();
    }

    @Bean
    public toyato gettoyato() {
        return new toyato();
    }
}

二、写一个@EnableSelector

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(CarConfigSelector.class)    //选择器返回的是类对象的名称(0、多)
public @interface EnableCarSelector {
}

三、实现接口进行扩展

public class CarConfigSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        System.out.println("注解的元数据annotationMetadata"+annotationMetadata);
        System.out.println("注解的元数据annotationMetadata.getClassName=="+annotationMetadata.getClassName());
        System.out.println("CarConfiguration.class.getName()=="+CarConfiguration.class.getName());

        String arr[] = new String[1];
        //arr[0] = CarConfiguration.class.getName();
        //arr[1] = BookConfiguration.class.getName();
        //String s = annotationMetadata.getClassName();
        boolean anno = annotationMetadata.hasAnnotation("com.wgc.annotationmetadata.config.EnableCarSelector");
        System.out.println("--boolean"+anno);
//        if (s.contains("CarConfig") == true) {  //运行的类包含这个字眼
//            arr[0] = CarConfiguration.class.getName();
//        } else {
//            arr[0] = BookConfiguration.class.getName();
//        }
        if (anno == true) {
            arr[0] = CarConfiguration.class.getName();
        } else {
            arr[0] = BookConfiguration.class.getName();
        }
        return arr;
    }
}

四、测试

根据选择器的条件判断,返回通过注册的对象

//有类对象才能拿注解,程序入口
//没有@ComponentScan,@Import,这个容器是扫不了东西拿不了东西的
//这个注解最终就是通过选择器判断拿到相应对象,也就是返回类名,有了这个类名就相当于拿到类对象
@EnableCarSelector
public class TestCarConfigSelector {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(TestCarConfigSelector.class)
                .web(WebApplicationType.NONE)
                .run(args);
        System.out.println("丰田奔驰Configuration-----");
        Benz benz = context.getBean("getBenz", Benz.class);
        System.out.println(benz.Introduce());
        System.out.println("书Configuration------");
        String java = context.getBean("java", String.class);
        System.out.println("java="+java);
        context.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值