自動(dòng)配置原理
-
SpringBootApplication
- 該注解標(biāo)識(shí)在SpringBoot項(xiàng)目的啟動(dòng)類上,是SpringBoot中最為重要的注解,該注解由三個(gè)部分組成。
- @SpringBootConfiguration:該注解與@Configuration注解作用一樣,用來(lái)聲明當(dāng)前類為一個(gè)配置類
- @ComponentScan:組件掃描,默認(rèn)掃描當(dāng)前啟動(dòng)類所在包及其子包
- @EnableAutoConfiguration:SpringBoot實(shí)現(xiàn)自動(dòng)化配置的核心注解
- 該注解是個(gè)復(fù)合注解,其中封住了一個(gè)@Import注解,指定注入到SpringIOC容器中的ImportSelector接口的實(shí)現(xiàn)類。
- 具體參照文章:SpringBoot原理-自動(dòng)配置-方案_熵240的博客-CSDN博客?
- 該實(shí)現(xiàn)類中實(shí)現(xiàn)了該接口(ImportSelector)中selectImports方法,該方法的返回值是我們要導(dǎo)入到IOC容器中的全類名的集合,
- 在該方法中加載了兩個(gè)文件?META-INF/spring和org.springframework.boot.autoconfigure.AutoConfiguration.imports
-
META-INF/spring目錄:這個(gè)目錄下的文件是Spring Boot自動(dòng)配置的核心配置文件。在這個(gè)目錄下,可以定義多個(gè)配置文件,每個(gè)配置文件對(duì)應(yīng)一個(gè)自動(dòng)配置類。這些配置文件使用了Spring的SPI(Service Provider Interface)機(jī)制,通過(guò)SpringFactoriesLoader加載并實(shí)例化自動(dòng)配置類。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-707027.html
-
org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:這個(gè)文件定義了需要自動(dòng)導(dǎo)入的其他自動(dòng)配置類。在自動(dòng)配置類中,可以使用@Import注解來(lái)導(dǎo)入其他自動(dòng)配置類。而在AutoConfiguration.imports文件中,可以列出需要自動(dòng)導(dǎo)入的自動(dòng)配置類的全限定類名,這樣在啟動(dòng)時(shí),Spring Boot會(huì)自動(dòng)將這些自動(dòng)配置類導(dǎo)入到容器中文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707027.html
-
- 在imports文件中會(huì)定義非常多的自動(dòng)配置類,配置類當(dāng)中也會(huì)定義很多bean對(duì)象,我們可以通過(guò)注解來(lái)設(shè)置將bean對(duì)象裝配到IOC容器的條件。具體參見(jiàn)文章:SpringBoot原理-自動(dòng)配置-原理分析-@Conditional_熵240的博客-CSDN博客? ?? ???
- 該注解是個(gè)復(fù)合注解,其中封住了一個(gè)@Import注解,指定注入到SpringIOC容器中的ImportSelector接口的實(shí)現(xiàn)類。
- 該注解標(biāo)識(shí)在SpringBoot項(xiàng)目的啟動(dòng)類上,是SpringBoot中最為重要的注解,該注解由三個(gè)部分組成。
小結(jié)?
- 自動(dòng)裝配簡(jiǎn)單講就是將第三方的bean以及配置類裝載到IOC容器中,開發(fā)人員就不再需要寫bean的配置了,自動(dòng)裝配的實(shí)現(xiàn)只需要在啟動(dòng)類上加入@SpringBootApplication注解就可以了,而@SpringBootApplication注解是一個(gè)復(fù)合注解,其中自動(dòng)裝配的實(shí)現(xiàn)是通過(guò)@EnableAutoConfiguration注解實(shí)現(xiàn)的,自動(dòng)裝配的實(shí)現(xiàn)主要依靠三個(gè)關(guān)鍵的技術(shù)。
- 第一,引入Starter,啟動(dòng)依賴組件的時(shí)候,該組件中必須含有@Configuration配置類,在這個(gè)配置類中,我們需要通過(guò)@Bean注解去聲明要裝配到IOC容器中的Bean對(duì)象
- 第二,上述配置類是放在第三方的jar包里面,然后通過(guò)SpringBoot中約定優(yōu)于配置的理念去把配置類的全路徑放在
META-INF/spring.factories
文件中,由此SpringBoot就可以知道第三方j(luò)ar包里面配置類的位置,當(dāng)Spring Boot啟動(dòng)時(shí),會(huì)通過(guò)SpringFactoriesLoader加載META-INF/spring.factories文件中定義的自動(dòng)配置類。然后根據(jù)條件注解的判斷,決定是否需要進(jìn)行自動(dòng)配置。 - 第三,SpringBoot拿到所有第三方j(luò)ar包里面聲明的配置類之后,在通過(guò)Spring提供的ImportSelector接口來(lái)實(shí)現(xiàn)對(duì)于這些配置類的動(dòng)態(tài)加載,從而完成自動(dòng)裝配。該接口的實(shí)現(xiàn)類由@EnableAutoConfiguration注解中包含的@Import注解來(lái)指定。通過(guò)實(shí)現(xiàn)該中String[] selectImports()方法,該方法的返回值為需要裝入Spring IOC容器中類。
到了這里,關(guān)于SpringBoot原理-自動(dòng)配置-原理分析-源碼跟蹤的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!