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