日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot的自動裝配,你學會了嗎?

來源: 責編: 時間:2024-05-29 08:54:19 140觀看
導讀我們今天再來說一下關于 SpringBoot 的自動裝配,為什么會有這樣的問題呢?一般這種情況都是在面試的過程中,面試官有時候會問到這個問題,就比如從開始問SpringBoot 的一些常用注解,到SpringBoot的一些特性,然后引申到這個 Sp

我們今天再來說一下關于 SpringBoot 的自動裝配,為什么會有這樣的問題呢?一般這種情況都是在面試的過程中,面試官有時候會問到這個問題,就比如從開始問SpringBoot 的一些常用注解,到SpringBoot的一些特性,然后引申到這個 SpringBoot 的自動裝配上來。今天就和了不起一起來聊聊關于這個 SpringBoot 的自動裝配吧。TdS28資訊網——每日最新資訊28at.com

什么是SpringBoot的裝配

Spring Boot 的自動裝配(Auto-Configuration)是指 Spring Boot 會根據項目中添加的依賴和其他因素,自動配置你的 Spring 應用程序。這一特性使得開發者在創建 Spring 應用程序時,可以省去大量的手動配置工作,從而快速啟動和運行應用程序。TdS28資訊網——每日最新資訊28at.com

自動裝配流程

SpringBoot的自動裝配工作流程主要基于其核心注解和一系列的配置機制,以下是對其工作流程的詳細解析:TdS28資訊網——每日最新資訊28at.com

1.啟動注解:

  • SpringBoot的自動裝配始于@SpringBootApplication注解。這個注解實際上是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三個注解的組合。

2.@SpringBootConfiguration:

  • @SpringBootConfiguration注解本質上是一個@Configuration注解的包裝,用于聲明當前類是一個配置類,可以定義Bean,也可以引入其他配置類。

3.@EnableAutoConfiguration:

  • 這是實現自動裝配的關鍵注解。它包含了@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)兩個子注解。
  • @AutoConfigurationPackage:用于自動配置包,使得主配置類(帶有@SpringBootApplication注解的類)所在的包及其子包中的組件都能被Spring容器掃描到。
  • @Import(AutoConfigurationImportSelector.class):這個注解的作用是導入類,但在這里它并不是直接導入一個普通的類,而是導入了一個實現了ImportSelector接口的類AutoConfigurationImportSelector。這個類的作用是根據一定的規則(比如類路徑下的META-INF/spring.factories文件)來加載并配置一些自動裝配的類。

4.META-INF/spring.factories:

  • 在Spring Boot的自動裝配過程中,META-INF/spring.factories文件起到了非常關鍵的作用。這個文件是Spring Boot用來加載自動配置類的一個約定俗成的文件,它位于各個Spring Boot Starter的jar包中。Spring Boot在啟動時,會掃描所有jar包中的META-INF/spring.factories文件,并將其中配置的自動配置類加載到Spring容器中。

5.自動配置類:

  • 這些類通常是以AutoConfiguration結尾的,它們使用@Configuration注解標注,并且內部定義了一些Bean。這些Bean就是Spring Boot自動裝配到Spring容器中的組件。

6.條件裝配:

  • 在自動配置類中,經常可以看到@ConditionalOnClass、@ConditionalOnProperty等條件注解。這些注解的作用是判斷當前環境是否滿足某個條件,如果滿足則進行自動裝配,否則不進行裝配。這樣可以根據項目的實際情況來靈活地選擇需要裝配的組件。

7.總結:

SpringBoot的自動裝配工作流程大致可以歸納為:首先通過@SpringBootApplication注解啟動Spring Boot應用,然后利用@EnableAutoConfiguration注解中的@Import(AutoConfigurationImportSelector.class)來加載META-INF/spring.factories文件中配置的自動配置類,最后根據這些自動配置類中的定義和條件注解來將相應的組件裝配到Spring容器中。TdS28資訊網——每日最新資訊28at.com

自動裝配的核心

@SpringBootApplication

這個注解,就是自動裝配的核心,我們來詳細解讀一下這個 @SpringBootApplicationTdS28資訊網——每日最新資訊28at.com

它其實是一個組合注解,用于簡化 Spring Boot 應用的配置。這個注解通常被用在 Spring Boot 的主類上,以指示該類是一個特殊的配置類,用于引導應用上下文的啟動。TdS28資訊網——每日最新資訊28at.com

組成部分

1.@SpringBootConfiguration:

  • 這是一個特殊的 @Configuration 注解,表示該類是一個配置類,并告訴 Spring Boot 這是一個特殊的配置類,用于加載應用的上下文設置。
  • 實際上,@SpringBootConfiguration 僅僅是 @Configuration 的一個特殊版本,并且二者在功能上沒有區別。但 @SpringBootConfiguration 更多地用于標識這是一個 Spring Boot 應用。

2.@EnableAutoConfiguration:

  • 這是 Spring Boot 的核心特性之一。它告訴 Spring Boot 根據添加的 jar 依賴項、類路徑設置、各種屬性設置等自動配置你的 Spring 應用。例如,如果你的類路徑下有 spring-boot-starter-web,那么 Spring Boot 會自動配置嵌入式 Tomcat 服務器和 Spring MVC。
  • 你可以通過 spring.autoconfigure.exclude 屬性來排除某些自動配置。

3.@ComponentScan:

  • @ComponentScan 告訴 Spring 掃描當前包及其子包下的組件(如 @Component、@Service、@Repository、@Controller 等),并將它們注冊為 Spring Bean。
  • 默認情況下,它會掃描標注了 @SpringBootApplication 注解的類所在的包及其子包。你可以通過 basePackages 或 basePackageClasses 屬性來指定掃描的包。

如果這個時候,我們給面試官解釋了這個 SpringBoot的自動裝配的原理之后,面試官很大程度上就開始要往下延伸內容了,既然 @Autowired 能實現了則個自動裝配,那么還有其他注解么?以及他和 @Autowired 的區別在哪呢?TdS28資訊網——每日最新資訊28at.com

@Resource和@Autowire

@Resource 和 @Autowired 都是 Spring 框架中用于自動裝配 bean 的注解,但它們之間有一些區別。以下是這兩個注解的主要區別:TdS28資訊網——每日最新資訊28at.com

來源不同

@Autowired 是 Spring 特有的注解,用于自動裝配 bean。TdS28資訊網——每日最新資訊28at.com

@Resource 是 Java 的標準注解,屬于 JSR-250 規范的一部分,但 Spring 也支持它作為自動裝配的注解。TdS28資訊網——每日最新資訊28at.com

@Autowired

@Autowired 是 Spring 特有的注解,用于自動裝配 bean。Spring 容器會檢查 bean 的屬性、方法以及構造器,然后使用與指定類型相匹配的 bean 進行自動裝配。TdS28資訊網——每日最新資訊28at.com

  • 類型匹配:默認情況下,@Autowired 是基于類型(Type)的自動裝配。如果存在多個相同類型的 bean,那么就需要使用其他機制(如 @Qualifier 注解或 @Primary 注解)來進一步指定。
  • 構造器注入:Spring 4.3 之后,推薦使用構造器注入來替代字段注入,因為它可以提供更好的不可變性和測試性。
  • 可配置性:@Autowired 是可選的,并且可以通過 Spring 的配置文件(如 XML 文件)進行更詳細的配置。

@Resource

@Resource 是 Java EE 的一部分(來自 JSR-250),同時也是 Spring 支持的注解。它提供了更豐富的功能,包括指定名稱(name)和類型(type)來查找 bean。TdS28資訊網——每日最新資訊28at.com

  • 名稱和類型匹配:與 @Autowired 相比,@Resource 提供了更靈活的匹配方式。它可以基于名稱(如果提供了)或類型進行查找。如果同時指定了名稱和類型,并且找不到匹配的 bean,那么就會拋出異常。
  • 與 Java EE 兼容:由于 @Resource 是 Java EE 的一部分,因此它可以在任何支持 Java EE 的環境中使用,而不僅僅是 Spring。

到這里,本篇文章就接近尾聲了,關于 SpringBoot的自動裝配,你掌握了多少呢?TdS28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-91355-0.htmlSpringBoot的自動裝配,你學會了嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入Go原理:協程間通信基礎Chan

下一篇: 一日一技:如何正確處理多行字符串的縮進問題

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • 28個SpringBoot項目中常用注解,日常開發、求職面試不再懵圈

    前言在使用SpringBoot開發中或者在求職面試中都會使用到很多注解或者問到注解相關的知識。本文主要對一些常用的注解進行了總結,同時也會舉出具體例子,供大家學習和參考。注解
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了“本地生活”入口,位置較深,位于首頁的“充值中心”內,目前主要售賣美食相關的
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質、
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 主站蜘蛛池模板: 兴国县| 汪清县| 日照市| 西贡区| 白朗县| 济源市| 团风县| 额敏县| 微博| 新宾| 忻州市| 离岛区| 南陵县| 开阳县| 上杭县| 广河县| 兰溪市| 东安县| 子长县| 南康市| 怀化市| 仙游县| 嘉黎县| 磴口县| 广安市| 武乡县| 沁源县| 绥江县| 海门市| 茶陵县| 托克逊县| 兴山县| 木里| 茶陵县| 唐河县| 邻水| 南阳市| 平阴县| 宁陕县| 垫江县| 普定县|