spring-boot-starter自动装配流程总结:
@SpringBootApplication注解是否组合注解,包含了@EnableAutoConfiguration,@EnableAutoConfiguration又包含了AutoConfigurationImportSelector.class自动配置导入选择器,
首先这个class扫描与启动类同一包下的组件外,还会去jar包中是否存在META-INF/spring.factories文件,然后从spring.factories中加载需要自动配置的类。(自动配置说的就是把Bean交给spring容器进行管理)
stater加载过程:
@SpringBootApplication
- @EnableAutoConfiguration
- @Import({AutoConfigurationImportSelector.class})
- META-INF
- spring.factories
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cq.entity.UserAutoConfiguration,\
com.cq.entity.ProductAutoConfiguration
ProductAutoConfiguration配置类中加载配置文件的读取类,和bean
@Data
public class AddressEntity {
public AddressEntity(Integer id){
this.id = id;
}
private Integer id;
}
// 自动装配类
@Configuration
@ConditionalOnClass({AddressEntity.class})
public class DemoAutoConfiguration {
@Bean
public AddressEntity addressEntity(){
return new AddressEntity(10);
}
}
META-INF/spring.factories文件:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cqsj.entity.DemoAutoConfiguration