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");
}
}