新聞中心
Spring Boot 是用來簡(jiǎn)化 Spring 的搭建和開發(fā)過程的全新框架。Spring Boot 去除了大量的 xml 配置文件,簡(jiǎn)化了復(fù)雜的依賴管理,配合各種 starter 使用,基本上可以做到自動(dòng)化配置,本篇文章重點(diǎn)為大家講解一下Spring Boot 底層原理。

創(chuàng)新互聯(lián)公司網(wǎng)站設(shè)計(jì),為客戶量身定制各類網(wǎng)站建設(shè)業(yè)務(wù),包括企業(yè)型、電子商務(wù)型、自適應(yīng)網(wǎng)站建設(shè)、行業(yè)門戶型等各類網(wǎng)站,實(shí)戰(zhàn)經(jīng)驗(yàn)豐富,成功案例眾多。以客戶利益為出發(fā)點(diǎn),創(chuàng)新互聯(lián)公司網(wǎng)站制作為客戶規(guī)劃、定制設(shè)計(jì)符合企業(yè)需求、帶有營(yíng)銷價(jià)值的網(wǎng)絡(luò)建站方案認(rèn)真對(duì)待每一個(gè)客戶,我們不用口頭的語言來吹擂我們的優(yōu)秀,近1000家的成功案例見證著我們的成長(zhǎng)。
1.基于你對(duì)springboot的理解描述一下什么是springboot
它是一個(gè)服務(wù)于spring框架的框架,能夠簡(jiǎn)化配置文件,快速構(gòu)建web應(yīng)用,內(nèi)置tomcat,無需打包部署,直接運(yùn)行。
2.約定優(yōu)于配置指的是什么?
maven 的目錄結(jié)構(gòu)a) 默認(rèn)有 resources 文件夾存放配置文件b) 默認(rèn)打包方式為 jarspring-boot-starter-web 中默認(rèn)包含 spring mvc 相關(guān)依賴以及內(nèi)置的 tomcat 容器,使得構(gòu)建一個(gè) web 應(yīng)用更加簡(jiǎn)單默認(rèn)提供 application.properties/yml 文件默認(rèn)通過 spring.profiles.active 屬性來決定運(yùn)行環(huán)境時(shí)讀取的配置文件EnableAutoConfiguration 默認(rèn)對(duì)于依賴的 starter 進(jìn)行自動(dòng)
3.@SpringBootApplication由哪幾個(gè)注解組成,這幾個(gè)注解分別表示什么作用
SpringBootApplication 本質(zhì)上是由 3 個(gè)注解組成,分別是
@Configuration@EnableAutoConfiguration@ComponentScan@Configuration:在啟動(dòng)類里面標(biāo)注了@Configuration,意味著它其實(shí)也是一個(gè) IoC容器的配置類
@EnableAutoConfiguration:springboot 應(yīng)用把所有符合條件的@Configuration 配置都加載到當(dāng)前 SpringBoot 創(chuàng)建并使用的 IoC 容器中。
@ComponentScan:ComponentScan 默認(rèn)會(huì)掃描當(dāng)前 package 下的的所有加了@Component 、@Repository、@Service、@Controller的類到 IoC 容器中;
4.springboot自動(dòng)裝配的實(shí)現(xiàn)原理
如果是之前的spring中使用redis需要在xml定義bean,現(xiàn)在只需要依賴一個(gè)spring-boot-starter-data-redis的jar包,jar中定義了RedisConfiguration,當(dāng)啟動(dòng)的時(shí)候spring會(huì)自動(dòng)裝載RedisConfiguration,那spring是如何知道配置類在哪里的呢?RedisConfiguration類的路徑放在了classpath*META-INF/spring.factories的文件中,spring會(huì)加載這個(gè)文件中配置的configuration
(1)SpringApplication.run(AppConfig.class,args);執(zhí)行流程中有refreshContext(context);這句話.(2)refreshContext(context);內(nèi)部會(huì)解析我們的配置類上的標(biāo)簽.實(shí)現(xiàn)自動(dòng)裝配功能的注解@EnableAutoConfiguration(3)會(huì)解析@EnableAutoConfiguration這個(gè)注解里面的@Import引入的配置類.AutoConfigurationImportSelector(4)AutoConfigurationImportSelector這個(gè)類中有這個(gè)方法.SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());(5)SpringFactoriesLoader.loadFactoryNames的作用就是讀取jar包中的/項(xiàng)目中的META-INF/spring.factories文件.(6)spring.factories配置了要自動(dòng)裝配的Configuration類
5.spring中的spi機(jī)制的原理是什么?
SPI的全名為Service Provider Interface,為某個(gè)接口尋找服務(wù)實(shí)現(xiàn)的機(jī)制。當(dāng)服務(wù)的提供者,提供了服務(wù)接口的一種實(shí)現(xiàn)之后,在jar包的META-INF/services/目錄里同時(shí)創(chuàng)建一個(gè)以服務(wù)接口命名的文件。該文件里就是實(shí)現(xiàn)該服務(wù)接口的具體實(shí)現(xiàn)類。而當(dāng)外部程序裝配這個(gè)模塊的時(shí)候,就能通過該jar包META-INF/services/里的配置文件找到具體的實(shí)現(xiàn)類名,并裝載實(shí)例化,完成模塊的注入。通過這個(gè)約定,就不需要把服務(wù)放在代碼中了,通過模塊被裝配的時(shí)候就可以發(fā)現(xiàn)服務(wù)類了。
在springboot的自動(dòng)裝配過程中,最終會(huì)加載META-INF/spring.factories文件,而加載的過程是由SpringFactoriesLoader加載的。從CLASSPATH下的每個(gè)Jar包中搜尋所有META-INF/spring.factories配置文件,然后將解析properties文件,找到指定名稱的配置后返回。需要注意的是,其實(shí)這里不僅僅是會(huì)去ClassPath路徑下查找,會(huì)掃描所有路徑下的Jar包,只不過這個(gè)文件只會(huì)在Classpath下的jar包中。
通過spi技術(shù)可以自定義starter,在自定義的配置文件META-INF/spring.factories中加入實(shí)現(xiàn)類,依賴這個(gè)starter的項(xiàng)目就會(huì)掃描jar包下的配置,找到實(shí)現(xiàn)類進(jìn)行裝載實(shí)例化
新聞名稱:淺談SpringBoot底層原理
本文路徑:http://www.5511xx.com/article/dhjdpop.html


咨詢
建站咨詢
