0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring依賴(lài)注入的方式

科技綠洲 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2023-11-22 15:12 ? 次閱讀

Spring 是一個(gè)開(kāi)源的輕量級(jí)框架,可以用于構(gòu)建企業(yè)級(jí)應(yīng)用程序。其最重要的特性之一是依賴(lài)注入(Dependency Injection,DI),這是一種設(shè)計(jì)模式,它可以幫助我們解耦代碼、提高可維護(hù)性和可測(cè)試性。同時(shí),Spring 提供了多種依賴(lài)注入的方式,以滿(mǎn)足不同場(chǎng)景下的需求。本文將詳細(xì)介紹 Spring 依賴(lài)注入的方式。

  1. 構(gòu)造函數(shù)注入(Constructor Injection):構(gòu)造函數(shù)注入是最常見(jiàn)的一種依賴(lài)注入方式。通過(guò)構(gòu)造函數(shù),我們可以在創(chuàng)建對(duì)象的同時(shí)傳入其依賴(lài)的對(duì)象。Spring 會(huì)根據(jù)配置文件或注解自動(dòng)解析這些依賴(lài),并在創(chuàng)建對(duì)象時(shí)進(jìn)行注入。這種方式的優(yōu)點(diǎn)是明確、簡(jiǎn)單,并且可以保證依賴(lài)的可用性。
  2. Setter 方法注入(Setter Injection):Setter 方法注入是另一種常見(jiàn)的依賴(lài)注入方式。通過(guò)提供一系列 setter 方法,我們可以在對(duì)象創(chuàng)建后隨時(shí)注入其依賴(lài)的對(duì)象,而不是在創(chuàng)建對(duì)象時(shí)立即注入。這種方式的優(yōu)點(diǎn)是可以在運(yùn)行時(shí)動(dòng)態(tài)注入依賴(lài),并且允許可選依賴(lài)。
  3. 接口注入(Interface Injection):接口注入是一種使用接口來(lái)定義依賴(lài)的方式。我們可以創(chuàng)建一個(gè)包含注入方法的接口,然后讓對(duì)象實(shí)現(xiàn)該接口并提供實(shí)現(xiàn)方法。這種方式相對(duì)于構(gòu)造函數(shù)注入和 Setter 方法注入來(lái)說(shuō)更加靈活,但也更加復(fù)雜。
  4. 字段注入(Field Injection):字段注入是一種直接注入依賴(lài)的方式。通過(guò)在字段上添加 @Autowired 注解,Spring 會(huì)自動(dòng)解析依賴(lài)并進(jìn)行注入。這種方式的優(yōu)點(diǎn)是簡(jiǎn)單方便,但也容易導(dǎo)致代碼臃腫和不易測(cè)試。因此,它在簡(jiǎn)單的場(chǎng)景下使用較多。
  5. 是否必需注入(Required Injection):有時(shí)候,我們希望一些依賴(lài)是必需的,而另一些依賴(lài)是可選的。Spring 提供了 @Required 注解來(lái)標(biāo)記必需的依賴(lài),如果某個(gè)必需的依賴(lài)沒(méi)有被注入,Spring 會(huì)拋出異常,以提醒我們修復(fù)這個(gè)問(wèn)題。
  6. 集合注入(Collection Injection):在某些場(chǎng)景下,我們需要注入一個(gè)對(duì)象的集合或數(shù)組。Spring 提供了集合注入的方式,可以通過(guò)構(gòu)造函數(shù)、Setter 方法或字段來(lái)注入集合。這樣我們就可以方便地管理和操作依賴(lài)的集合。
  7. 自動(dòng)裝配(Autowiring):自動(dòng)裝配是一種更加便捷的依賴(lài)注入方式。當(dāng)我們使用 @Autowired 注解時(shí),Spring 會(huì)自動(dòng)查找合適的依賴(lài)并進(jìn)行注入。這樣我們就不需要手動(dòng)配置每個(gè)依賴(lài)的注入方式,從而簡(jiǎn)化了配置。
  8. Java 配置(JavaConfig):除了使用 XML 配置文件外,Spring 還提供了使用 Java 進(jìn)行配置的方式。我們可以使用 @Configuration 注解標(biāo)記配置類(lèi),并使用 @Bean 注解來(lái)定義依賴(lài)。這種方式更加直觀、類(lèi)型安全,并且可以通過(guò)代碼來(lái)管理依賴(lài)。
  9. 注解配置(AnnotationConfig):除了 XML 和 Java 配置外,Spring 還支持使用注解進(jìn)行配置。我們可以使用 @Component、@Service@Repository 等注解來(lái)標(biāo)記依賴(lài),Spring 會(huì)自動(dòng)掃描并進(jìn)行注入。這種方式簡(jiǎn)化了配置,并且可以更好地使用面向切面編程(AOP)和其他高級(jí)特性。
  10. 基于 XML 的配置(XML Configuration):最后,我們還可以使用 XML 配置文件來(lái)管理依賴(lài)的注入。通過(guò)在 XML 文件中配置 `` 元素,我們可以指定依賴(lài)的注入方式、依賴(lài)關(guān)系和其他屬性。這是最傳統(tǒng)、最靈活的一種配置方式,但也更加繁瑣和容易出錯(cuò)。

綜上所述,Spring 提供了多種依賴(lài)注入的方式,包括構(gòu)造函數(shù)注入、Setter 方法注入、接口注入、字段注入、是否必需注入、集合注入、自動(dòng)裝配、Java 配置、注解配置和基于 XML 的配置。每種方式都有其適用的場(chǎng)景和優(yōu)缺點(diǎn),我們可以根據(jù)實(shí)際需求選擇合適的方式來(lái)進(jìn)行依賴(lài)注入。它們的共同目標(biāo)是解耦代碼、提高可維護(hù)性和可測(cè)試性,使我們的代碼更加清晰、簡(jiǎn)單和可靠。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68075
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3221

    瀏覽量

    57499
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    335

    瀏覽量

    14277
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺談控制反轉(zhuǎn)和依賴(lài)注入

    依賴(lài)注入)是實(shí)現(xiàn)這種思想的一種方式,或者說(shuō)Ioc是一種概念,DI是這種概念的思想,不知道我這樣理解的對(duì)不對(duì)。可能一開(kāi)始接觸這些東西有點(diǎn)莫名其妙,園友們寫(xiě)的一些東西也看得頭疼,至少我當(dāng)時(shí)是這樣,如果你是像我一樣的菜鳥(niǎo),請(qǐng)跟我一起
    的頭像 發(fā)表于 10-29 11:38 ?2185次閱讀
    淺談控制反轉(zhuǎn)和<b class='flag-5'>依賴(lài)</b><b class='flag-5'>注入</b>

    java spring教程

    Spring核心概念介紹控制反轉(zhuǎn)(IOC)依賴(lài)注入(DI)集合對(duì)象注入等Bean的管理BeanFactoryApplicationContextSpring 在web中的使用
    發(fā)表于 09-11 11:09

    什么是java spring

    。在SSH項(xiàng)目中管理事務(wù)以及對(duì)象的注入Spring是非侵入式的:基于Spring開(kāi)發(fā)的系統(tǒng)中的對(duì)象一般不依賴(lài)Spring的類(lèi)。組成
    發(fā)表于 09-11 11:16

    三大框架之Spring

    ;出現(xiàn)了Spring,可以自動(dòng)創(chuàng)建需要被調(diào)用的對(duì)象以及進(jìn)行屬性注入,也可以維護(hù)這些bean(具體的java類(lèi))之間的關(guān)系;
    發(fā)表于 05-27 07:21

    Spring工作原理

    依賴(lài)關(guān)系核心:bean工廠(chǎng);在Spring中,bean工廠(chǎng)創(chuàng)建的各個(gè)實(shí)例稱(chēng)作bean二.AOP(Aspect-Oriented Programming): 面向方面編程1.代理的兩種方式:靜態(tài)代理
    發(fā)表于 07-10 07:41

    Spring筆記分享

    ; 可以管理所有的組件(類(lèi))Spring的優(yōu)良特性1) 非侵入式:基于Spring開(kāi)發(fā)的應(yīng)用中的對(duì)象可以不依賴(lài)Spring的API2) 依賴(lài)
    發(fā)表于 11-04 07:51

    spring教程ppt

    主要內(nèi)容Spring 概述Spring 整體結(jié)構(gòu)Spring實(shí)例Spring核心概念介紹控制反轉(zhuǎn)(IOC)依賴(lài)
    發(fā)表于 09-11 11:00 ?138次下載
    <b class='flag-5'>spring</b>教程ppt

    Spring開(kāi)發(fā)過(guò)程中依賴(lài)注入的幾個(gè)知識(shí)點(diǎn)

    is not recommended的警告?你知道這是為什么嗎? Spring 依賴(lài)注入有哪幾種方式?官方是怎么建議使用的呢? 如果你對(duì)上述問(wèn)題都了解,那我個(gè)人覺(jué)得你的開(kāi)發(fā)經(jīng)驗(yàn)應(yīng)該是
    的頭像 發(fā)表于 08-27 09:18 ?1601次閱讀

    關(guān)于Spring的循環(huán)依賴(lài)問(wèn)題

      Spring 的循環(huán)依賴(lài),源碼詳細(xì)分析 → 真的非要三級(jí)緩存嗎 中講到了循環(huán)依賴(lài)問(wèn)題
    的頭像 發(fā)表于 06-14 17:21 ?1707次閱讀

    從源碼層面深度剖析Spring循環(huán)依賴(lài)

    參考圖中 spring 解決循環(huán)依賴(lài) 的過(guò)程可知,spring 利用三級(jí)緩中的 objectFactory 生成并返回一個(gè) early 對(duì)象,提前暴露這個(gè) early 地址,供其他對(duì)象依賴(lài)
    的頭像 發(fā)表于 12-22 10:34 ?483次閱讀

    容器配置及Spring Boot注解

    Autowired注解用于標(biāo)記Spring將要解析和注入依賴(lài)項(xiàng)。此注解可以作用在構(gòu)造函數(shù)、字段和setter方法上。
    的頭像 發(fā)表于 04-07 11:45 ?524次閱讀
    容器配置及<b class='flag-5'>Spring</b> Boot注解

    Spring依賴(lài)注入Bean類(lèi)型的8種情況

    今天來(lái)講的一個(gè)你可能不曾注意的小東西,那就是Spring依賴(lài)注入支持注入Bean的類(lèi)型,這個(gè)小東西可能看似沒(méi)有用但是實(shí)際又有點(diǎn)小用。 其實(shí)本來(lái)這周沒(méi)打算寫(xiě)文章,但是突然之間就想到
    的頭像 發(fā)表于 05-11 10:53 ?507次閱讀
    <b class='flag-5'>Spring</b><b class='flag-5'>依賴(lài)</b><b class='flag-5'>注入</b>Bean類(lèi)型的8種情況

    探討Spring框架中的屬性注入技術(shù)

    在本文中,我們深入探討了 Spring 框架中的屬性注入技術(shù),包括 setter 注入、構(gòu)造器注入、注解式屬性注入,以及使用 SpEL 表達(dá)
    的頭像 發(fā)表于 06-14 09:37 ?876次閱讀
    探討<b class='flag-5'>Spring</b>框架中的屬性<b class='flag-5'>注入</b>技術(shù)

    Lombok版的構(gòu)造器注入方式

    怎么解決這個(gè)問(wèn)題呢? 問(wèn)題原因 違背單一職責(zé)原則 因?yàn)楝F(xiàn)在的業(yè)務(wù)一般都會(huì)使用很多依賴(lài), 但擁有太多的依賴(lài)通常意味著承擔(dān)更多的責(zé)任,而這顯然違背了單一職責(zé)原則。 依賴(lài)Spring @Au
    的頭像 發(fā)表于 09-25 10:50 ?867次閱讀

    Spring依賴(lài)注入的四種方式

    Spring框架中,依賴(lài)注入是一種核心的概念和機(jī)制。通過(guò)依賴(lài)注入,我們可以讓對(duì)象之間的依賴(lài)關(guān)系
    的頭像 發(fā)表于 12-03 15:11 ?1649次閱讀