Spring Boot 是一個(gè)可以輕松創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)的基于 Spring 的應(yīng)用程序的框架,Spring Boot 框架將 Spring、MyBatis、SpringMVC 中的一系列配置進(jìn)行了簡(jiǎn)化,只需要使用最簡(jiǎn)單的配置和注解就能快速開(kāi)發(fā)應(yīng)用程序。通過(guò)官網(wǎng)提供的 Spring Initializr 插件可以快速生成 Spring Boot 應(yīng)用。
網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);成都做網(wǎng)站、成都網(wǎng)站制作收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了10多年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。什么是自動(dòng)裝配
Spring Boot 相比于 Spring 的一個(gè)很大進(jìn)步點(diǎn)在于不用再手動(dòng)配置一系列配置文件,Spring Boot 提供了配置應(yīng)用程序和框架所需要的基本配置,這就是自動(dòng)配置。
Spring Boot 啟動(dòng)器
Spring Boot 中的一系列啟動(dòng)器是自動(dòng)裝配的最佳實(shí)踐。比如當(dāng)引入了一個(gè) spring-boot-starter-web 依賴:
org.springframework.boot spring-boot-starter-web
Spring Boot 框架就會(huì)自動(dòng)引入 web 環(huán)境所有的依賴,并且自動(dòng)配置,Spring Boot 將所有的功能場(chǎng)景,都變成一個(gè)個(gè)啟動(dòng)器,想要用什么功能,只需要找到對(duì)應(yīng)的啟動(dòng)器就可以了。
Spring Boot 的所有啟動(dòng)器可以在官網(wǎng)https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter中找到,下圖是所有啟動(dòng)器中的一小部分:
自動(dòng)裝配原理分析
Spring Boot 的主程序也可以稱為啟動(dòng)類(lèi),這是開(kāi)啟 Spring Boot 項(xiàng)目的入口。查看源代碼推薦使用 IDEA。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
@SpringBootApplication 注解標(biāo)注這個(gè)類(lèi)是一個(gè) SpringBoot 的啟動(dòng)類(lèi),這個(gè)注解也是自動(dòng)裝配的核心。
@Target、Retention、Documented、Inherited 四個(gè)注解是標(biāo)準(zhǔn)的元注解,核心在于@SpringBootConfiguration和@EnableAutoConfiguration這兩個(gè)注解。
通過(guò)繼續(xù)進(jìn)入注解內(nèi)部,可以將@SpringBootConfiguration和@EnableAutoConfiguration這兩個(gè)注解的結(jié)構(gòu)表示出來(lái):
@SpringBootConfiguration : Spring Boot 的配置
@Configuration : Spring 配置類(lèi)
@Component : Spring 的組件
@EnableAutoConfiguration : 自動(dòng)配置
@AutoConfigurationPackage : 自動(dòng)配置包
@Import({Registrar.class}) : 自動(dòng)配置包注冊(cè)
@Import({AutoConfigurationImportSelector.class}) : 導(dǎo)入選擇器
@SpringBootConfiguration 聲明了這個(gè)類(lèi)為 SpringBoot 的組件,@EnableAutoConfiguration 是自動(dòng)配置的核心,其中@AutoConfigurationPackage 對(duì)配置包冊(cè),AutoConfigurationImportSelector 類(lèi)來(lái)進(jìn)行自動(dòng)裝配。
繼續(xù)來(lái)看看 AutoConfigurationImportSelector 這個(gè)類(lèi)
引入環(huán)境。
引入 bean 加載器。
引入資源加載器。
配置導(dǎo)入。
繼續(xù)向下看,selectImports 中 的getAutoConfigurationEntry 方法第 123 行代碼將所有的配置通過(guò) getCandidateConfigurations 方法放進(jìn)一個(gè) List 集合中
繼續(xù)進(jìn)入 getCandidateConfigurations 方法,這個(gè)配置獲取的路徑是 EnableAutoConfiguration.class,也就是@SpringBootApplication 所依賴的兩個(gè)重要注解的其中一個(gè)。這段代碼最終想表達(dá)的意思是將啟動(dòng)類(lèi)下的所有配置都導(dǎo)入。
進(jìn)入 LoadFactoryNames 或者就從 Assert.notEmpty 的信息中,可以發(fā)現(xiàn)這些配置來(lái)自于 META-INF/spring.factories 中,從 jar 包中可以查看到具體的目錄結(jié)構(gòu)
在 spring.factories 文件中存在大量 xxxAutoConfiguration,這個(gè)文件記錄了所有 starter 的自動(dòng)裝配類(lèi),就是這些類(lèi)在容器中導(dǎo)入了場(chǎng)景需要的所有組件;并通過(guò) @Configuration 自動(dòng)配置
通過(guò)一張圖來(lái)總結(jié)一下自動(dòng)裝配的原理,通過(guò)上面對(duì)源碼的分析,可以看出 SpringBoot 所有的自動(dòng)配置都在啟動(dòng)類(lèi)中被掃描和加載。所有的自動(dòng)配置類(lèi)都在 spring.properties 中。
自動(dòng)裝配總結(jié)起來(lái)可以分為以下幾步:
Spring Boot 在啟動(dòng)的時(shí)候,從類(lèi)路徑下/META-INF/spring.factories 獲取指定的值;
將這些自動(dòng)配置的類(lèi)導(dǎo)入容器,自動(dòng)配置就會(huì)生效,進(jìn)行自動(dòng)配置!
以前我們需要自動(dòng)配置的東西,現(xiàn)在 Spring Boot 幫我們做了
自動(dòng)配置的東西都在 spring-boot-autoconfigure.jar 這個(gè)包下
它會(huì)把所有需要導(dǎo)入的組件,以類(lèi)名的方式返回,這些組件就會(huì)被添加到容器;
容器中也會(huì)存在非常多的 xxxAutoConfiguration
的類(lèi)(@Bean),就是這些類(lèi)給容器中導(dǎo)入了這個(gè)場(chǎng)景需要的所有組件;并通過(guò)@Configuration 自動(dòng)配置。
有了自動(dòng)配置類(lèi),免去了我們手動(dòng)編寫(xiě)配置文件的步驟。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧