国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring Boot】自動(dòng)配置及重要注解解析

這篇具有很好參考價(jià)值的文章主要介紹了【Spring Boot】自動(dòng)配置及重要注解解析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、自動(dòng)配置及原理

1、springboot自動(dòng)配置了哪些功能

1)tomcat的自動(dòng)配置

引入了tomcat的相關(guān)依賴
【Spring Boot】自動(dòng)配置及重要注解解析

2)自動(dòng)配置springmvc及常用功能

我們?cè)谥鲉?dòng)類中加兩行代碼,查看一下spring boot加載了哪些組件
【Spring Boot】自動(dòng)配置及重要注解解析
通過在控制臺(tái)輸出中搜索,我們可以發(fā)現(xiàn)轉(zhuǎn)發(fā)請(qǐng)求的dispatcherServlet、解決亂碼的characterEncodingFilter還有視圖解析器ViewResolver都已經(jīng)被自動(dòng)加載

3)默認(rèn)的包結(jié)構(gòu)

主程序所在包及其下面的所有子包里面的組件都會(huì)被默認(rèn)掃描進(jìn)來,無需向之前那樣專門去配置
如果想調(diào)整包掃描路徑,可以將主啟動(dòng)類中的@SpringBootApplication注解替換成
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
然后再@ComponentScan后面指定自己想要的包掃描路徑

4)各種配置都具有默認(rèn)值

我們可以簡單看下各個(gè)配置的默認(rèn)值
默認(rèn)配置最終都是映射到某個(gè)類上,這個(gè)類會(huì)在容器中創(chuàng)建對(duì)象
【Spring Boot】自動(dòng)配置及重要注解解析

5)按需加載所有的自動(dòng)配置項(xiàng)

并非所有的自動(dòng)配置項(xiàng)都會(huì)加載,只有我們引入了對(duì)應(yīng)的啟動(dòng)器,才會(huì)自動(dòng)加載相應(yīng)的自動(dòng)配置項(xiàng)
SpringBoot所有的自動(dòng)配置功能都在spring-boot-autoconfigure這個(gè)jar包里面

2、注解分析

1)底層注解分析
  • @Configuration:標(biāo)注當(dāng)前類是一個(gè)配置類,可以使用@Configuration+@Bean的方式注冊(cè)bean到spring boot的IOC容器中,默認(rèn)是單實(shí)例的,可參考我之前的博客 【Spring】使用JavaConfig實(shí)現(xiàn)配置
    • 此注解新加了一個(gè)屬性proxyBeanMethods,默認(rèn)開啟
    • 如果此屬性為true,那么每次@Bean方法被調(diào)用多少次返回的組件都是單實(shí)例的,如果是false,那么保證每個(gè)@Bean方法被調(diào)用多少次返回的組件都是新創(chuàng)建的
    • 如果bean之間存在組件依賴必須使用Full模式(proxyBeanMethods=true),其他默認(rèn)使用Lite模式(proxyBeanMethods=false)
  • @Import:在IOC容器中自動(dòng)創(chuàng)建出引入類型的bean,默認(rèn)bean的名字就是全類名
  • @ConditionalOnProperty(xxx):判斷括號(hào)內(nèi)的配置是否存在且配在auto配置且值為true就生效,你沒配我也認(rèn)為配了
  • @Conditional:條件裝配,滿足Conditional指定的條件,則進(jìn)行bean注入,它有很多子類
    【Spring Boot】自動(dòng)配置及重要注解解析
  • @ImportResource:用于導(dǎo)入 Spring 的 xml 配置文件,將該配置文件中定義的 bean 對(duì)象加載到Spring容器中,在配置類上使用
  • 想要將配置文件中的配置與類進(jìn)行綁定,可以使用下面兩種組合的注解
    • @ConfigurationProperties(prefix=“xxx”)+@Component:配置綁定,使用在實(shí)體類上,prefix前綴的值為配置文件中配置項(xiàng)的前綴
    • @EnableConfigurationProperties(xxx.class)+@ConfigurationProperties
      @EnableConfigurationProperties使用在配置類上,括號(hào)內(nèi)填需要綁定配置的實(shí)體類,它的作用是使得@ConfigurationProperties注解生效,將括號(hào)內(nèi)的bean注冊(cè)到容器中
      @ConfigurationProperties使用在實(shí)體類上,這個(gè)注解通常是用來將properties和yml配置文件屬性轉(zhuǎn)化為bean對(duì)象使用
2)主啟動(dòng)類核心注解

主啟動(dòng)類中的@SpringBootApplication就等于@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan

  • @SpringBootConfiguration,繼續(xù)深入可以發(fā)現(xiàn)它就是@Configuration注解修飾的,表示這個(gè)類就是一個(gè)配置類

  • @EnableAutoConfiguration

    • @AutoConfigurationPackage
      繼續(xù)深入可以發(fā)現(xiàn),這個(gè)注解上面有一個(gè)@Import({Registrar.class})注解,作用就是將Register注冊(cè)到組件中
      Register類里有一個(gè)方法可以批量注冊(cè)bean,我們使用debug模式看一下傳進(jìn)來的元數(shù)據(jù),這樣就可以理解為什么Spring boot可以不用配置自動(dòng)掃描了,因?yàn)樗鼘?dòng)類所在包下的類都注冊(cè)到容器中了
      【Spring Boot】自動(dòng)配置及重要注解解析

    • @Import({AutoConfigurationImportSelector.class})
      這個(gè)類和spring boot導(dǎo)入自動(dòng)配置類有關(guān),框架啟動(dòng)時(shí)會(huì)加載所有的配置類(關(guān)鍵文件META-INF下的spring.factories),但是因?yàn)闂l件裝配規(guī)則(即@Conditional相關(guān)注解)的存在,這些自動(dòng)配置會(huì)按需生效
      【Spring Boot】自動(dòng)配置及重要注解解析
      【Spring Boot】自動(dòng)配置及重要注解解析
      【Spring Boot】自動(dòng)配置及重要注解解析
      上面這個(gè)方法會(huì)去我們引入的jar包下找META-INF/spring.factories文件,如果有
      org.springframework.boot.autoconfigure.EnableAutoConfiguration修飾的類,就會(huì)加載進(jìn)來
      【Spring Boot】自動(dòng)配置及重要注解解析
      注意,從spring boot2.7開始,慢慢不支持META-INF/spring.factories文件了
      需要導(dǎo)入的自動(dòng)配置類可以放在
      /META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,可以看下spring-boot-autoconfigure-2.7.0.jar下的這個(gè)文件

  • @ComponentScan:指定掃描哪些類,將其注冊(cè)到容器中

3、自動(dòng)配置實(shí)現(xiàn)原理

那么問題來了,spring boot是如何做到讓我們免去那么多麻煩的配置的呢?
我們可以看一下DispatcherServletAutoConfiguration和HttpEncodingAutoConfiguration的源碼
【Spring Boot】自動(dòng)配置及重要注解解析

【Spring Boot】自動(dòng)配置及重要注解解析
我們可以發(fā)現(xiàn),spring boot在底層都幫我們預(yù)先配置了所有的組件,但是會(huì)以用戶自己配置的優(yōu)先
如果用戶沒有配,那么就默認(rèn)把框架默認(rèn)配置好的bean注冊(cè)到容器中

4、SpringBootApplication類

首先我們先跟進(jìn)run方法看下,發(fā)現(xiàn)在調(diào)用run之前,程序調(diào)用了SpringApplication類的構(gòu)造方法
【Spring Boot】自動(dòng)配置及重要注解解析
然后我們看下構(gòu)造器里面做了什么
首先他判斷當(dāng)前項(xiàng)目是否為web項(xiàng)目(是否包含SpringBootWeb的相關(guān)依賴)
【Spring Boot】自動(dòng)配置及重要注解解析
【Spring Boot】自動(dòng)配置及重要注解解析
然后就是看一下接下來的getSpringFactoriesInstances()方法
這里面有一個(gè)SpringFactoriesLoader.loadFactoryNames(type, classLoader)方法
【Spring Boot】自動(dòng)配置及重要注解解析
跟進(jìn)去看一下,發(fā)現(xiàn)他會(huì)去每個(gè)依賴下讀META-INF/spring.factories文件(自動(dòng)裝配的核心文件)
【Spring Boot】自動(dòng)配置及重要注解解析
如果發(fā)現(xiàn)有當(dāng)前接口類的實(shí)現(xiàn)類,就會(huì)統(tǒng)一放在list集合中返回
【Spring Boot】自動(dòng)配置及重要注解解析
接著就根據(jù)上一步的返回結(jié)果,調(diào)用相關(guān)方法初始化相關(guān)bean的實(shí)例,進(jìn)行排序后返回實(shí)例
【Spring Boot】自動(dòng)配置及重要注解解析

總結(jié):

  • SpringBoot先加載所有的自動(dòng)配置類 xxxxxAutoConfiguration
  • 每個(gè)自動(dòng)配置類按照條件進(jìn)行生效,默認(rèn)都會(huì)綁定配置文件指定的值。它會(huì)去xxxxProperties里面拿,而xxxProperties和配置文件進(jìn)行了綁定
  • 生效的配置類就會(huì)給容器中裝配很多組件
  • 只要容器中有這些組件,相當(dāng)于這些功能就有了
  • 定制化配置
    • 直接自己@Bean替換底層的組件
    • 查看這個(gè)組件獲取配置文件是哪個(gè),就去application.properties或者yaml文件中修改對(duì)應(yīng)的配置項(xiàng)

如有錯(cuò)誤,歡迎指正??!文章來源地址http://www.zghlxwxcb.cn/news/detail-405552.html

到了這里,關(guān)于【Spring Boot】自動(dòng)配置及重要注解解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正確使用

    深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正確使用

    ??深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正確使用 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:架構(gòu)設(shè)計(jì) ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平

    2024年02月04日
    瀏覽(24)
  • Spring Boot源碼解析 - 自動(dòng)裝配原理

    Spring Boot源碼解析 - 自動(dòng)裝配原理

    Spring Boot 自動(dòng)裝配是 Spring Boot 框架的一個(gè)關(guān)鍵特性,它的目標(biāo)是讓開發(fā)者能夠快速構(gòu)建 Spring 應(yīng)用程序,減少繁瑣的配置工作。 ? @SpringApplication 從啟動(dòng)類 @SpringApplication 注解入手, @SpringBootApplication 是一個(gè)組合注解,它是 Spring Boot 框架中常用的一個(gè)主要注解之一。它結(jié)合了

    2024年01月19日
    瀏覽(36)
  • Spring屬性注解對(duì)配置項(xiàng)名稱的自動(dòng)轉(zhuǎn)換

    ???????在Spring中,我們經(jīng)常需要將配置文件中的屬性值注入到Java類中。Spring提供了兩個(gè)主要的注解來實(shí)現(xiàn)這一功能: @Value 和 @ConfigurationProperties 。其中 @ConfigurationProperties 支持將配置項(xiàng)名稱與Java類中的屬性名進(jìn)行自動(dòng)轉(zhuǎn)換,包括 \\\' - \\\'?和\\\' 駝峰命名 \\\'的轉(zhuǎn)換;而 @Value 不支

    2024年02月15日
    瀏覽(18)
  • 【Spring Boot 源碼學(xué)習(xí)】自動(dòng)裝配流程源碼解析(下)

    【Spring Boot 源碼學(xué)習(xí)】自動(dòng)裝配流程源碼解析(下)

    《Spring Boot 源碼學(xué)習(xí)系列》 上篇博文,筆者帶大家了解了自動(dòng)裝配流程中有關(guān)自動(dòng)配置加載的流程; 本篇將介紹自動(dòng)裝配流程剩余的內(nèi)容,包含了自動(dòng)配置組件的排除和過濾、觸發(fā)自動(dòng)配置事件。 在開始本篇的內(nèi)容介紹之前,我們先來看看往期的系列文章【有需要的朋友,

    2024年02月11日
    瀏覽(38)
  • 【Spring Boot 源碼學(xué)習(xí)】自動(dòng)裝配流程源碼解析(上)

    【Spring Boot 源碼學(xué)習(xí)】自動(dòng)裝配流程源碼解析(上)

    《Spring Boot 源碼學(xué)習(xí)系列》 上篇博文,筆者帶大家從整體上了解了AutoConfigurationImportSelector 自動(dòng)裝配邏輯的核心功能及流程,由于篇幅有限,更加細(xì)化的功能及流程詳解還沒有介紹。本篇開始將從其源碼入手,重點(diǎn)解析細(xì)化后的自動(dòng)裝配流程源碼。 在開始本篇的內(nèi)容介紹之前

    2024年02月14日
    瀏覽(32)
  • Spring Boot——Spring Boot自動(dòng)配置原理

    Spring Boot——Spring Boot自動(dòng)配置原理

    Spring Boot啟動(dòng)原理 一直在使用Spring Boot特別好奇的是為什么Spring Boot比Spring在項(xiàng)目構(gòu)建和開發(fā)過程中要方便很多,無需編寫大量的配置,Spring Boot自動(dòng)給你配置好了。往往是集成項(xiàng)目依賴之后一鍵使用。于是小編我就學(xué)習(xí)和研究了一下Spring Boot的自動(dòng)配置。 主程序入口示例 :

    2024年02月15日
    瀏覽(14)
  • Spring Boot 屬性配置解析

    Spring Boot 屬性配置解析

    基于Spring Boot 3.1.0 系列文章 Spring Boot 源碼閱讀初始化環(huán)境搭建 Spring Boot 框架整體啟動(dòng)流程詳解 Spring Boot 系統(tǒng)初始化器詳解 Spring Boot 監(jiān)聽器詳解 Spring Boot banner詳解 Spring Boot 3.1.0 支持的屬性配置方式與2.x版本沒有什么變動(dòng),按照以下的順序處理,后面的配置將覆蓋前面的配置

    2024年02月09日
    瀏覽(23)
  • 【Spring Boot】掌握Spring Boot:深入解析配置文件的使用與管理

    【Spring Boot】掌握Spring Boot:深入解析配置文件的使用與管理

    ?? 博客主頁:從零開始的-CodeNinja之路 ? 收錄文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用與管理 ??歡迎大家點(diǎn)贊??評(píng)論??收藏?文章 配置文件主要是為了解決硬編碼帶來的問題,把可能會(huì)發(fā)生改變的信息,放在?個(gè)集中的地方,當(dāng)我們啟 動(dòng)某個(gè)程序時(shí),應(yīng)用程

    2024年04月23日
    瀏覽(20)
  • spring boot 自動(dòng)配置

    spring boot 自動(dòng)配置

    自動(dòng)配置介紹 Spring Boot自動(dòng)裝配(Auto Configuration)是Spring Boot框架的一個(gè)關(guān)鍵特性,它通過約定大于配置的方式來簡化項(xiàng)目的配置過程。自動(dòng)裝配允許開發(fā)人員使用默認(rèn)的配置,同時(shí)也可以根據(jù)需要進(jìn)行定制化。Spring通過使用 @Autowired 注解、 @ComponentScan 注解以及條件化配置等

    2024年01月25日
    瀏覽(22)
  • Spring Boot自動(dòng)配置原理

    Spring Boot自動(dòng)配置原理

    springboot是基于spring的新型的輕量級(jí)框架,最厲害的地方當(dāng)屬**自動(dòng)配置。**那我們就可以根據(jù)啟動(dòng)流程和相關(guān)原理來看看,如何實(shí)現(xiàn)傳奇的自動(dòng)配置 從上面代碼可以看出,Annotation定義(@SpringBootApplication)和類定義(SpringApplication.run)最為耀眼,所以要揭開SpringBoot的神秘面紗

    2024年01月19日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包