springboot核心原理
導讀 | Spring Boot是伴隨著Spring4.0共同誕生的,它的目的就是簡化spring的配置及開發,並協助開發人員可以整體管理應用程式的配置而不再像以前那樣需要做大量的配置工作,它提供了很多開發元件,並且內嵌了web應用容器,如tomcat和Jetty等。其目的便是使我們的開發變得簡化並且能大幅度提高開發人員的開發效率,為了簡化Spring功能的配置我們可以引入或啟動我們需要的Spring功能。這樣做的好處就是避免開發人員過多的對框架的關注,而把更多的精力與時間放在系統的業務邏輯程式碼中。 |
它是一個服務於spring框架的框架,能夠簡化配置檔案,快速構建web應用,
內建tomcat,無需打包部署,直接執行。
maven 的目錄結構
a) 預設有 resources 資料夾存放配置檔案
b) 預設打包方式為 jar
spring-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包下的配置,找到實現類進行裝載例項化
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2770638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- springboot自學(6)springboot核心原理Spring Boot
- Springboot Starter的核心實現原理Spring Boot
- Socket 核心原理分享
- Netty核心原理Netty
- 這一次搞懂SpringBoot核心原理(自動配置、事件驅動、Condition)Spring Boot事件
- binder核心原理解析
- NameServer 核心原理解析Server
- kafka核心原理總結Kafka
- GeoHash核心原理解析
- SpringBoot 啟動原理Spring Boot
- SpringBoot執行原理Spring Boot
- SpringBoot啟動原理Spring Boot
- _007_SpringBoot_SpringBoot的核心檔案Spring Boot
- myvue 模擬vue核心原理Vue
- 深入瞭解Zookeeper核心原理
- 玩轉Koa -- 核心原理分析
- Semaphore 使用&核心原理 圖解圖解
- struts2核心工作原理
- Docker的核心實現原理Docker
- SpringBoot | 2.1 SpringBoot自動裝配原理Spring Boot
- SpringBoot | 自動配置原理Spring Boot
- SpringBoot原理發現(一)Spring Boot
- springBoot-啟動原理Spring Boot
- SpringBoot自動配置原理Spring Boot
- springboot 自動配置原理Spring Boot
- vuex 中的核心概念及原理Vue
- .NET WebSockets 核心原理初體驗Web
- springboot_自動配置原理Spring Boot
- SpringBoot的自動配置原理Spring Boot
- SpringBoot 啟動類的原理Spring Boot
- Redis核心原理與實踐--列表實現原理之ziplistRedis
- 【SpringBoot實戰】核心配置和註解Spring Boot
- ZooKeeper核心原理及應用場景
- Java執行緒池核心原理剖析Java執行緒
- Linux 核心101:cache原理Linux
- JDK ThreadPoolExecutor核心原理與實踐JDKthread
- 深入koa原始碼(二):核心庫原理原始碼
- Spring Cloud底層原理(核心元件)SpringCloud元件