实现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));