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

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


咨詢
建站咨詢
