目錄
1 什么是自動裝配
2 Spring自動裝配原理
?2.1 @SpringBootConfiguration
?編輯?2.2?@EnableAutoConfiguration
?2.2.1?@AutoConfigurationPackage
2.2.2? @Import({AutoConfigurationImportSelector.class})
?2.3?@ComponentScan
1 什么是自動裝配
????????自動裝配就是將官方寫好的的配置類加載到spring容器,然后根據配置類生成一些項目所需要的bean對象。(對于springBoot來講,就是從spring.factories文件獲取到對應需要進行自動裝配的類,并生成相應的bean對象交給spring管理。)
2 Spring自動裝配原理
要想搞明白spring自動裝配的原理,就需要從我們springBoot上啟動類的注解入手。
@SpringBootApplication?
該注解是springBoot啟動類的一個注解,是一個組合注解,主要作用就是說明這個類是springBoot的主配置類。該注解主要由三個注解組成
@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
?2.1 @SpringBootConfiguration
這個注解包含了@Configuration,@Configuration里面又包含了一個@Component,也就是說這個注解標記在哪個類上,那么這個類就是spring的配置類。
?2.2?@EnableAutoConfiguration
這個注解是開啟了自動配置的功能
?2.2.1?@AutoConfigurationPackage
這個注解的作用就是將主配置類(就是有SpringBootApplication標注的類)的所在包以及子包里面的所有容器掃描并加載到spring容器里面,這也就是為什么平時在springboot開發時,我們縮寫的controller層和service路徑都與朱配置類同級或者次級的原因。
2.2.2? @Import({AutoConfigurationImportSelector.class})
上個注解是將所有的組件都加載到了容器里面,那這個注解就是將所有需要自動裝配的類以全類名的形式返回,那么接下里我們就來說一說哪些是需要自動裝配的類。
1.AutoConfigurationImportSelector類中有一個selectImports()方法,該方法又調用了getAutoConfigurationEntry這個方法,如下:
?2?getAutoConfigurationEntry()方法中又調用了getCandidateConfigurations()這個方法
?3 在getCandidateConfigurations()方法中又調用了loadFactoryNames()方法
?4 在loadFactoryNames()方法中又調用了loadSpringFactories()方法
?5 在loadSpringFactories() 方法中加載了META-INF目錄下的spring.factories文件
?6?在META-INF/spring.factories這個文件里面的數據是以鍵=值的方式存儲,然后解析這些文件
?2.3?@ComponentScan
這個注解的作用就是掃描當前包及子包的注解