深度剖析Spring Boot自动装配机制实现原理

实现ImportBeanDefinitionRegistrar接口进行动态注入

CacheService


public class CacheService {

}

LoggerService


public class LoggerService {

}

EnableDefineService


@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited --允许被继承

@Import({GpDefineImportSelector.class})

public @interface EnableDefineService {

String\[\] packages() default "";

}

GpDefineImportSelector


public class GpDefineImportSelector implements ImportSelector {

@Override
public String\[\] selectImports(AnnotationMetadata annotationMetadata) {
    //获得指定注解的详细信息。我们可以根据注解中配置的属性来返回不同的class,
    //从而可以达到动态开启不同功能的目的

annotationMetadata.getAllAnnotationAttributes(EnableDefineService.class.getName(),true)

        .forEach((k,v) -> {
            log.info(annotationMetadata.getClassName());
            log.info("k:{},v:{}",k,String.valueOf(v));
        });
    return new String\[\]{CacheService.class.getName()};
}

}

EnableDemoTest


@SpringBootApplication

@EnableDefineService(name = “gupao”,value = “gupao”)

public class EnableDemoTest {

public static void main(String\[\] args) {
    ConfigurableApplicationContext ca=SpringApplication.run(EnableDemoTest.class,args);
    System.out.println(ca.getBean(CacheService.class));
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值