欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧

 更新時(shí)間:2022年03月22日 14:58:24   作者:扎哇太棗糕  
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)自動(dòng)配置的底層分析與一些開發(fā)中的小技巧

1 自動(dòng)配置底層分析

1.1 ?自動(dòng)配置注解解析

@SpringBootApplication注解是SpringBoot的核心注解,他是由以下三個(gè)注解總和而成.

@SpringBootConfiguration

該注解底層有一個(gè)@Configuration注解,標(biāo)明當(dāng)前類是一個(gè)配置類

@EnableAutoConfiguration該注解又由以下兩個(gè)注解組合而成

  • @AutoConfigurationPackage:底層使用@Import({Registrar.class})向容器中注冊組件,Registrar.class里獲取到主程序所在的包并將包下的所有組件導(dǎo)入進(jìn)來,這也就間接說明了SpringBoot的默認(rèn)包掃描規(guī)則: 主程序(MainApplication)所在的包及這個(gè)包的所有子包都會(huì)被掃描

  • @Import(AutoConfigurationImportSelector.class):AutoConfigurationImportSelector.class下有一個(gè)selectImports方法,方法里面又使用getAutoConfigurationEntry內(nèi)部的getCandidateConfigurations方法獲取需要注冊的組件都有哪些,getCandidateConfigurations方法里面使用SpringFactoriesLoader.loadFactoryNames內(nèi)層的loadSpringFactories方法里的getResources(“META-INF/spring.factories”)默認(rèn)掃描當(dāng)前系統(tǒng)里面所有jar包META-INF/spring.factories位置下的文件。后面發(fā)現(xiàn)spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories文件,文件里面有個(gè)EnableAutoConfiguratio配置項(xiàng)寫死了spring-boot一啟動(dòng)就要給容器中加載的所有配置類。雖然我們127個(gè)場景中自動(dòng)配置啟動(dòng)的時(shí)候默認(rèn)全部加載所有的xxxxAutoConfiguration,但是最終按照條件裝配規(guī)則(@Conditional)按需配置。

@ComponentScan 這個(gè)注解定義了包掃描的規(guī)則

1.2 修改默認(rèn)配置

  SpringBoot默認(rèn)會(huì)在底層配好所有的組件,但是如果用戶自己配置了以用戶的優(yōu)先。使用@ConditionalOnMissingBean注解判斷容器中是否存在該組件的話就使用默認(rèn)的類進(jìn)行配置

1.3 總結(jié)

● SpringBoot先通過xxxxxAutoConfiguration加載所有的自動(dòng)配置類

● 每個(gè)自動(dòng)配置類按照條件進(jìn)行生效,默認(rèn)都會(huì)綁定配置文件指定的值,這個(gè)值就在xxxxProperties里面拿,xxxProperties和配置文件進(jìn)行了綁定。

● 生效的配置類就會(huì)給容器中裝配很多組件

● 只要容器中有這些組件,相當(dāng)于這些功能就有了

● 定制化配置

○ 用戶直接自己@Bean替換底層的組件

○ 在創(chuàng)建的配置文件中使用配置項(xiàng)修改默認(rèn)的配置信息。比如說配置字符編碼格式在HttpEncodingAutoConfiguration里的注解中可以得知

xxxxxAutoConfiguration —> 組件 —>

xxxxProperties里面拿值 ----> application.properties

1.4 最佳實(shí)踐

根據(jù)上述自動(dòng)配置原理總結(jié)SpringBoot的最佳項(xiàng)目實(shí)踐流程

引入場景依賴

<dependency>
  	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

查看自動(dòng)配置了哪些組件

  • 默認(rèn)場景對(duì)應(yīng)的自動(dòng)配置一般都生效
  • 配置文件中debug=true開啟自動(dòng)配置報(bào)告,其中Positive(生效組件)、Negative(不生效組件)以及會(huì)顯示不生效的原因是什么沒有匹配到

修改配置項(xiàng)

組件修改

@Bean、@Component……注解

…………業(yè)務(wù)流程

2 開發(fā)小技巧

2.1 Lombok簡化開發(fā)

第一步: 導(dǎo)入依賴(由于starter啟動(dòng)器中已經(jīng)配置了版本,于是可以不去再次進(jìn)行設(shè)置)

<dependency> 	
	<groupId>org.projectlombok</groupId> 	
	<artifactId>lombok</artifactId>
</dependency> 

第二步: 搜索安裝lombok插件

第三步: 使用注解進(jìn)行開發(fā)

JavaBean的注解 使用注解并不會(huì)直接自動(dòng)生成代碼,而是在編譯期間將注解的方法補(bǔ)上。而且如果需要使用多參但不全構(gòu)造器的話,沒有注解可以完成,需要自己在源碼上手寫

  • @NoArgsConstructor: 無參構(gòu)造器
  • @AllArgsConstructor: 全參構(gòu)造器
  • @ToString: 全參數(shù)的toString方法
  • @Data: getter和setter方法

生成日志

  • 類上加注解@Slf4j
  • log.info方法打印日志

2.2 偽熱更新

第一步: 導(dǎo)入依賴

<dependency> 	
	<groupId>org.springframework.boot</groupId> 	
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency> 

第二步: 使用熱更新功能,在項(xiàng)目源碼中更新了代碼,不需要重啟服務(wù)器,直接使用Ctrl+F9刷新項(xiàng)目信息,就可以使用更新之后的代碼了。靜態(tài)頁面的改變使用Ctrl+F9,就是在服務(wù)器中直接更新頁面信息,其他的信息改變就相當(dāng)于使用按鈕重啟項(xiàng)目。如果想要實(shí)現(xiàn)不需任何操作就實(shí)時(shí)更新的話可以使用JRebel,但是缺點(diǎn)就是收費(fèi)。

2.3 創(chuàng)建Spring Initailizr項(xiàng)目

  這個(gè)小技巧就是在使用IDEA的企業(yè)版開發(fā)的時(shí)候,直接創(chuàng)建一個(gè)springBoot項(xiàng)目,還可以自定義項(xiàng)目中所需要的技術(shù),創(chuàng)建完成之后就會(huì)自動(dòng)生成SpringBoot項(xiàng)目相應(yīng)的主程序類、pom.xml文件等

右鍵創(chuàng)建項(xiàng)目的時(shí)候選擇Spring Initailizr,主要就是勾選自己需要的技術(shù)

效果:

到此這篇關(guān)于SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧的文章就介紹到這了,更多相關(guān)SpringBoot2 自動(dòng)配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的方法(簡單好用!)

    Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的方法(簡單好用!)

    這篇文章主要給大家介紹了關(guān)于Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的相關(guān)資料,可以使用Java 8的Stream API將Java Map轉(zhuǎn)換為List,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java多線程下的其他組件之CyclicBarrier、Callable、Future和FutureTask詳解

    Java多線程下的其他組件之CyclicBarrier、Callable、Future和FutureTask詳解

    這篇文章主要介紹了Java多線程下的其他組件之CyclicBarrier、Callable、Future和FutureTask詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java 如何在list中刪除我指定的對(duì)象

    java 如何在list中刪除我指定的對(duì)象

    這篇文章主要介紹了java 如何在list中刪除我指定的對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn)方法詳解

    Java實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn)方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java語言如何實(shí)現(xiàn)優(yōu)雅的參數(shù)校驗(yàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定是幫助,需要的可以參考一下
    2022-06-06
  • Java線程中斷及線程中斷的幾種使用場景小結(jié)

    Java線程中斷及線程中斷的幾種使用場景小結(jié)

    在并發(fā)編程中,合理使用線程中斷機(jī)制可以提高程序的魯棒性和可維護(hù)性,本文主要介紹了Java線程中斷及線程中斷的幾種使用場景小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Springboot實(shí)現(xiàn)多線程注入bean的工具類操作

    Springboot實(shí)現(xiàn)多線程注入bean的工具類操作

    這篇文章主要介紹了Springboot實(shí)現(xiàn)多線程注入bean的工具類操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java多線程狀態(tài)及方法實(shí)例解析

    Java多線程狀態(tài)及方法實(shí)例解析

    這篇文章主要介紹了Java多線程狀態(tài)及方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 簡單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)

    簡單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)

    本文主要介紹了簡單注解實(shí)現(xiàn)集群同步鎖的步驟與方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路

    Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路

    這篇文章主要給大家介紹了關(guān)于Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路,判斷一個(gè)字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,實(shí)現(xiàn)這個(gè)判斷有很多種方式,需要的朋友可以參考下
    2023-08-08
  • MapReduce核心思想圖文詳解

    MapReduce核心思想圖文詳解

    今天小編就為大家分享一篇關(guān)于MapReduce核心思想圖文詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評(píng)論