springboot核心是自动装配
spring ioc的升级过程
- xml方式
- 注解方式
- javaconfig方式
- springboot提供的自动装配
springboot自动装配的核心
- EnableAutoConfiguration
- @Import(AutoConfigurationImportSelector.class)
- ImportSelector.selectImports
- META-INF/spring.factories
ImportSelector.selectImports返回的就是javaconfig类,再根据Condition筛选后,决定是否执行注入
官方提供的自动装配配置在spring-boot-autoconfigure中的META-INF/spring.factories中,如spring-boot-starter-data-redis
非官方需要自己提供spring.factories,如mybatis-spring-boot-autoconfigure中定义了META-INF/spring.factories
通过继承ImportSelector.selectImports实现spring注入
@SpringBootApplication
@EnableSelectImportService
public class SelectImportApp {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SelectImportApp.class);
SelectImportService service = context.getBean(SelectImportService.class);
service.hello();
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(MySelectImport.class)
public @interface EnableSelectImportService {
}
public class MySelectImport implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{SelectImportService.class.getName()};
}
}
public class SelectImportService {
public void hello(){
System.out.println("hello selectimport");
}
}