您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring Boot的底層原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring Boot的底層原理是什么”吧!
它是一個服務于spring框架的框架,能夠簡化配置文件,快速構建web應用,內置tomcat,無需打包部署,直接運行。
maven 的目錄結構a) 默認有 resources 文件夾存放配置文件b) 默認打包方式為 jarspring-boot-starter-web 中默認包含 spring mvc 相關依賴以及內置的 tomcat 容器,使得構建一個 web 應用更加簡單默認提供 application.properties/yml 文件默認通過 spring.profiles.active 屬性來決定運行環境時讀取的配置文件EnableAutoConfiguration 默認對于依賴的 starter 進行自動
SpringBootApplication 本質上是由 3 個注解組成,分別是
@Configuration@EnableAutoConfiguration@ComponentScan@Configuration:在啟動類里面標注了@Configuration,意味著它其實也是一個 IoC容器的配置類
@EnableAutoConfiguration:springboot 應用把所有符合條件的@Configuration 配置都加載到當前 SpringBoot 創建并使用的 IoC 容器中。
@ComponentScan:ComponentScan 默認會掃描當前 package 下的的所有加了@Component 、@Repository、@Service、@Controller的類到 IoC 容器中;
如果是之前的spring中使用redis需要在xml定義bean,現在只需要依賴一個spring-boot-starter-data-redis的jar包,jar中定義了RedisConfiguration,當啟動的時候spring會自動裝載RedisConfiguration,那spring是如何知道配置類在哪里的呢?RedisConfiguration類的路徑放在了classpath*META-INF/spring.factories的文件中,spring會加載這個文件中配置的configuration
(1)SpringApplication.run(AppConfig.class,args);執行流程中有refreshContext(context);這句話.
(2)refreshContext(context);內部會解析我們的配置類上的標簽.實現自動裝配功能的注解@EnableAutoConfiguration
(3)會解析@EnableAutoConfiguration這個注解里面的@Import引入的配置類.AutoConfigurationImportSelector
(4)AutoConfigurationImportSelector這個類中有這個方法.SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
(5)SpringFactoriesLoader.loadFactoryNames的作用就是讀取jar包中的/項目中的META-INF/spring.factories文件.
(6)spring.factories配置了要自動裝配的Configuration類
SPI的全名為Service Provider Interface,為某個接口尋找服務實現的機制。當服務的提供者,提供了服務接口的一種實現之后,在jar包的META-INF/services/目錄里同時創建一個以服務接口命名的文件。該文件里就是實現該服務接口的具體實現類。而當外部程序裝配這個模塊的時候,就能通過該jar包META-INF/services/里的配置文件找到具體的實現類名,并裝載實例化,完成模塊的注入。通過這個約定,就不需要把服務放在代碼中了,通過模塊被裝配的時候就可以發現服務類了。
在springboot的自動裝配過程中,最終會加載META-INF/spring.factories文件,而加載的過程是由SpringFactoriesLoader加載的。從CLASSPATH下的每個Jar包中搜尋所有META-INF/spring.factories配置文件,然后將解析properties文件,找到指定名稱的配置后返回。需要注意的是,其實這里不僅僅是會去ClassPath路徑下查找,會掃描所有路徑下的Jar包,只不過這個文件只會在Classpath下的jar包中。
通過spi技術可以自定義starter,在自定義的配置文件META-INF/spring.factories中加入實現類,依賴這個starter的項目就會掃描jar包下的配置,找到實現類進行裝載實例化
感謝各位的閱讀,以上就是“Spring Boot的底層原理是什么”的內容了,經過本文的學習后,相信大家對Spring Boot的底層原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。