最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 自動配置底層分析

1.1 ?自動配置注解解析

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

@SpringBootConfiguration

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

@EnableAutoConfiguration該注解又由以下兩個注解組合而成

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

  • @Import(AutoConfigurationImportSelector.class):AutoConfigurationImportSelector.class下有一個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文件,文件里面有個EnableAutoConfiguratio配置項寫死了spring-boot一啟動就要給容器中加載的所有配置類。雖然我們127個場景中自動配置啟動的時候默認(rèn)全部加載所有的xxxxAutoConfiguration,但是最終按照條件裝配規(guī)則(@Conditional)按需配置。

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

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

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

1.3 總結(jié)

● SpringBoot先通過xxxxxAutoConfiguration加載所有的自動配置類

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

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

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

● 定制化配置

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

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

xxxxxAutoConfiguration —> 組件 —>

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

1.4 最佳實踐

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

引入場景依賴

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

查看自動配置了哪些組件

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

修改配置項

組件修改

@Bean、@Component……注解

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

2 開發(fā)小技巧

2.1 Lombok簡化開發(fā)

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

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

第二步: 搜索安裝lombok插件

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

JavaBean的注解 使用注解并不會直接自動生成代碼,而是在編譯期間將注解的方法補上。而且如果需要使用多參但不全構(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> 

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

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

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

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

效果:

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

相關(guān)文章

  • Spring boot2X Consul如何通過RestTemplate實現(xiàn)服務(wù)調(diào)用

    Spring boot2X Consul如何通過RestTemplate實現(xiàn)服務(wù)調(diào)用

    這篇文章主要介紹了spring boot2X Consul如何通過RestTemplate實現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • mybatis-generator生成多次重復(fù)代碼問題以及解決

    mybatis-generator生成多次重復(fù)代碼問題以及解決

    在使用MySQL數(shù)據(jù)庫時,如果多個數(shù)據(jù)庫中存在相同表名,即使在URL中配置了數(shù)據(jù)庫名,也可能導(dǎo)致數(shù)據(jù)互相影響,解決這一問題的方法是在mapper-generator-config.xml文件中添加catalog屬性,明確指定逆向工程代碼所涉及表的數(shù)據(jù)庫名
    2024-10-10
  • Java和JVM的重載識別,重寫方法是怎樣進行的

    Java和JVM的重載識別,重寫方法是怎樣進行的

    這篇文章主要介紹了Java和JVM的重載識別,重寫方法是怎樣進行的,違章圍繞了Java和JVM的重載識別,重寫方法展開相關(guān)資料,需要的小伙伴可以參考一下,希望對你的工作或?qū)W習(xí)有所幫助
    2022-01-01
  • SpringBoot整合模板引擎過程代碼實例

    SpringBoot整合模板引擎過程代碼實例

    這篇文章主要介紹了SpringBoot整合模板引擎過程代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 詳解Java Ajax jsonp 跨域請求

    詳解Java Ajax jsonp 跨域請求

    本篇文章主要介紹了詳解Java Ajax jsonp 跨域請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java實現(xiàn)注冊郵箱激活賬戶實例代碼

    Java實現(xiàn)注冊郵箱激活賬戶實例代碼

    本篇文章主要介紹了Java實現(xiàn)郵箱激活賬戶實例代碼,這里整理了詳細(xì)的代碼,具有一定的參考價值,有需要的小伙伴可以參考下。
    2017-07-07
  • SpringBoot 中的異步處理機制詳解

    SpringBoot 中的異步處理機制詳解

    本文介紹了異步處理的基礎(chǔ)配置、線程池的自定義以及常見應(yīng)用場景,在實際應(yīng)用中,異步處理可以有效提升應(yīng)用的性能,改善用戶體驗,但同時也需要我們合理管理線程池,確保系統(tǒng)資源的高效利用,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 淺談Java設(shè)計模式之開放封閉原則

    淺談Java設(shè)計模式之開放封閉原則

    本篇文章主要介紹了淺談Java設(shè)計模式之開放封閉原則,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • java如何分布式鎖實現(xiàn)和選型

    java如何分布式鎖實現(xiàn)和選型

    文章介紹了分布式鎖的重要性以及在分布式系統(tǒng)中常見的問題和需求,它詳細(xì)闡述了如何使用分布式鎖來確保數(shù)據(jù)的一致性和系統(tǒng)的高可用性,文章還提供了基于數(shù)據(jù)庫、Redis和Zookeeper的分布式鎖實現(xiàn)示例,分析了每種方法的優(yōu)點和缺點
    2025-01-01
  • 解決IDEA Gradle構(gòu)建報錯''Cause: zip END header not found''

    解決IDEA Gradle構(gòu)建報錯''Cause: zip END header not found''

    這篇文章主要介紹了解決IDEA Gradle構(gòu)建報錯"Cause: zip END header not found"的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

凤翔县| 资源县| 景德镇市| 玛多县| 渭源县| 固始县| 马公市| 池州市| 巴林左旗| 蓝山县| 西吉县| 霍邱县| 平塘县| 神池县| 清水县| 长宁区| 慈溪市| 苏州市| 苏尼特左旗| 施秉县| 酉阳| 运城市| 宝清县| 金门县| 宁陵县| 铜梁县| 石渠县| 雅安市| 西充县| 临潭县| 黑龙江省| 大丰市| 微博| 涿鹿县| 吴堡县| 大邑县| 忻城县| 金门县| 万盛区| 栾川县| 阿荣旗|