天天看點

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

哈喽各位同學們大家好呀,新一周的第一天小編為大家分享開發者學院中課程“Spring Boot2.5自動化配置Autoconfig底層原理”幹貨總結哦~Spring Boot 2.5.x開發實戰可是Java中級工程師必備課程;

課程連結以及圖譜位址小編已經為大家指路了,搭配學習效果更佳👇

課程名稱:Spring Boot 2.5.x開發實戰

課程位址:

https://developer.aliyun.com/learning/course/71?spm=a2c6h.21254954.0.0.4e905907uoWZzr

圖譜名稱:Alibaba Java 技術圖譜

圖譜位址:

https://developer.aliyun.com/graph/java?spm=a2c6h.21110250.J_5703890090.6.700e3c67EjOBeJ

Spring Boot2.5自動化配置Autoconfig底層原理 

(一)Java Spring Boot 2.5 自動化配置機制解析  

1、Java Spring Boot目标 

Spring Boot的設計的目标,就是叫靈活式開發,簡化整個Java應用程式的開發過程,首先是自動化的依賴的管理工作,配置相對簡單,依賴解析也是自動化的,容器,包括中心點配置盡量完成,盡量通過少代碼而實作整個Java項目的管理配置工作,這是它的一個初衷,對于提升開發效率簡化配置過程,非常有幫助。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

2、Bean配置 

因為底層封裝的時候非常隐蔽,不容易知道其中的一些實驗原理,實際為了做一個Java的網站,需要改善了代碼,大量/bean的配置,檔案得修改,十分複雜的,但是現在Spring Boot2.0,這些工作已經都不需要去這麼來做了,越來越簡單。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

(二)Spring Boot 2.0自動化 配置機制 

1、Spring Boot 2.0自動化配置機制  

底層得具體操作過程,自動化配置就是整個稽核的項目會自動完成一個配置的解析、包的加載過程、下載下傳加載過程以及注入過程,甚至包括容器環境的一些配置,最核心的是在2.0以後有個重點SpringBootApplication ,背後是其他幾個注解的一個捆綁體,另外一個觀點是提出了叫非侵入式,但是完全做非侵入式還是比較難,但是有兩種選擇,一通過配置檔案參數配置的方式來完成,二通過代碼的方式來做。 

以下是在SpringBoot2.0以後做的一些自動化配置的機制。 

  1. Spring Boot auto configuration  
  2. Spring Boot 自動配置  
  3. 嘗試根據classpath的jar依賴自動配置Spring應用。 
  4.  @AutoConfiguration注解 過期 
  5.  @Configuration注解  
  6.  @EnableAutoConfiguration注解 
  7.  @SpringBootApplication 注解 2.0版本新增 
  8.  Auto-configuration is non-invasive 非侵入式  
  9.  也可以禁用自動配 

2、@SpringBootApplication 注解等于三大注解  

上節課所寫的程式裡面,實際底層背後與配置相關的有三大注解: 

@EnableAutoConfiguration:enable Spring Boot’s autoconfiguration mechanism 

  @ComponentScan: enable @Component scan on the package where the application is located (see the best practices)  

@Configuration: allow to register extra beans in the context or import additional configuration classes 

 configuration注解,在早期的使用MVC裡面,Spring架構裡面已經擁有,用來實作自動化配置的加載的過程,可以去設定一些通過類型、配置檔案來做。 

ComponentScan可以去做一些元件的掃描,如安全的元件,資料通路層的業務流程的元件,甚至其他一些模型的實體的元件,都可以标記完以後由它來進行掃描,如指定一個包,去特定包下面進行掃描那些元件。 

EnableAutoConfiguration在 SpringBoot裡就提供了,主要是告訴目前的程式啟用什麼,啟用自動化配置的一個機制,現在SpringBootApplication注解可以直接來實作,大大簡化了資料配置過程。 

3、自動化配置機制核心  

•spring-boot-autoconfigure.jar  

•spring.factorie 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

之前講過的項目,在SpringBoot依賴包裡面有autoconfigure依賴包,它裡面實際對整個SpringBoot的加載做了很多擴充,在配置、解析、加載等等一系列過程中的話,埋下點,可以再進行工作的擴充,如在配置剛加載的時候,攔截校驗,配置下載下傳完成以後,可以去修改它配置參數等等一系列工作。 

4、@SpringBootApplication 注解 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

5、@SpringBootApplication注解機制  

1.@SpringBootApplication注解= @SpringBootConfiguration+ @EnableAutoConfiguration + @ComponentScan 之和  

2.@Configuration 将該注解類标記為應用程式上下文的bean來 源。 3.@EnableAutoConfiguration告訴Spring Boot自動配置添加 bean。 

4.通常手動會為Spring MVC應用程式添加@EnableWebMvc,  

5.但Spring Boot會在類路徑上看到spring-webmvc時自動添加 它該注解。  

6.為Web應用添加并啟用關鍵特性,例如設定DispatcherServlet。 

7.@ComponentScan告訴Spring 掃描元件,配置和服務,控制 器 

(三)Spring Boot 2.5自動化 配置機制流程  

1、Java Spring Boot 2.x 啟動過程 

Spring Boot成為啟動過程中,配置這個選項是非常重要,當然也有一些預設參數,顯示配置和預設配置,當它内置的有一個預設的配置清單,加一個starter的一個依賴,是背後有一個預設清單,然後逐漸去把所有的預設的配置,版本号對應版本的包給拉進來。 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

2、面試題:自動化裝配 

@SpringBootApplication= 

@EnableAutoConfiguration + 

@Configuration 

@ComponentScan 

本質上還是早期Spring實作的叫配置的一個注解configuration,加上元件掃描等,啟用制造位置,隻告訴目前的程式要啟用一系列預設的預設的政策,有清單要找一下,有可能有攔截的代碼,想辦法給去檢查一下是否執行相關邏輯的擴充代碼。 

3、AutoConfigurationPackages 

@EnableAutoConfiguration 在裡面擔任的角色是非常重要的,實際是另外一個擴充點,針對SpringBoot的一個擴充點。 

  1. AutoConfigurationPackages.Registrar注冊存儲客 戶端配置包清單的bean, 
  2.  便于以後使用。 
  3.  Spring引導在内部使用此清單,例如 在springboot-autoconfigure的資料通路配置類中。  
  4.  可以通過靜态方法AutoConfigurationPackages.get (BeanFactory)通路此清單: 

包加載有一個專門的 AutoConfigurationPackages.Registrar管理的一個類型,屬于SpringBoot的一個擴充。 

4、ImportSelector 

1. 導入選擇器  

2. @Import (EnableAutoConfigurationImportSelector.class)  

3. 此批注負責引導自動配置機制。  

4. EnableAutoConfigurationImportSelector實作 DeferredImportSelector。  

5. 這個選擇器實作使用Spring核心 SpringFactoriesLoader.loadFactoryNames(),  

6. 它從META-INF / spring.factories加載配置類 

(四)Spring Boot 2.0監控自 動化配置Bean 

1、監控自動化配置Bean代碼 

監控一下整個Bean的注入過程,如下圖所示, 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

舉例 

開發者學堂課程幹貨總結——Spring Boot 2.5.x開發實戰(三)

有些是根本用不到的,隻需要請求路由,請求的處理,然後加上一系列的虛拟化反應的話就可以,看到上面那個機制,它加載了可能上百個Bean,但是實際是沒有必要的。 

使用波段的本身,自動化的配置的過程,确實是大大減化了配置工作,提升了開發的效率。