spring-boot autoConfiguration

一, 第一个待注入类

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);
    }
}
原文地址:https://www.cnblogs.com/snow-man/p/11158743.html