一, 第一个待注入类
public class CacheService { } public class LoggerService { }
方法一, 实现接口ImportSelectort
public class CacheImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { return new String[]{CacheService.class.getName()}; } }
方法二, 实现接口ImportBeanDefinitionRegistrar,
public class LoggerServiceSelector implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(LoggerService.class); String strBeanname = StringUtils.uncapitalize(LoggerService.class.getName()); beanDefinitionRegistry.registerBeanDefinition(strBeanname, rootBeanDefinition); } }
自定义Enable注解, 将CacheService, LoggerService加载到Spring-boot项目中
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component @Import({CacheImportSelector.class, LoggerServiceSelector.class}) public @interface EnableCacheService { } //启动Spring-boot @EnableCacheService @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemoApplication.class, args); CacheService cacheService = context.getBean(CacheService.class); System.out.println(cacheService.toString()); LoggerService loggerService = context.getBean(LoggerService.class); System.out.println(loggerService); } }