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

SpringBoot中的依賴注入和自動注入

這篇具有很好參考價值的文章主要介紹了SpringBoot中的依賴注入和自動注入。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

以下內(nèi)容為本人學習Spring Boot的依賴注入和自動注入與ChatGpt提問后對其回答進行部分修改(有的錯誤實在是離譜 = =)、格式調(diào)整等操作后的答案,可能對于其中部分細節(jié)(是錯是對,能力有限有的看不出來 = =),并未做深入探究,大家感興趣的話可以自行驗證。

詳細講講依賴注入

依賴注入Dependency Injection,簡稱DI)的概念最早由Martin Fowler2004年提出。依賴注入是一種軟件設計模式,旨在解耦和組織對象之間的依賴關系,以提高代碼的可維護性和可測試性。

在傳統(tǒng)的編程模式中,一個對象通常負責自己創(chuàng)建和管理所依賴的其他對象。這種緊密耦合的設計模式會導致代碼的脆弱性,因為對象需要直接知道它所依賴的對象的實現(xiàn)細節(jié),并且對于變化會很敏感(使用過傳統(tǒng)編程模式的應該深有體會)。此外,這也會增加代碼的復雜性,使得對象之間的關系變得難以理解和維護。

依賴注入的目標是通過將依賴對象的創(chuàng)建和管理責任從對象本身轉(zhuǎn)移到外部容器中,以實現(xiàn)松耦合和可維護。在依賴注入中,對象聲明它所需要的依賴關系,而不需要關心如何創(chuàng)建或獲取這些依賴對象。

依賴注入的核心思想是控制反轉(zhuǎn)Inversion of Control,簡稱IoC)。在傳統(tǒng)的編程模式中,對象自己控制創(chuàng)建和管理它所依賴的對象,而在依賴注入中,這種控制被反轉(zhuǎn)了。對象不再自己創(chuàng)建依賴對象,而是通過外部容器(通常是一個IoC容器)來創(chuàng)建和注入依賴對象

依賴注入可以通過以下幾種方式實現(xiàn)

  1. 構(gòu)造函數(shù)注入(Constructor Injection):對象通過構(gòu)造函數(shù)接收依賴對象作為參數(shù)。在創(chuàng)建對象時,依賴對象會被傳遞給構(gòu)造函數(shù)進行注入。這種方式通常提供了更好的不變性和一致性。

  2. Setter方法注入(Setter Injection):對象通過Setter方法設置依賴對象。在對象創(chuàng)建后,通過調(diào)用相應的Setter方法來注入依賴對象。這種方式可以提供更靈活的注入方式,允許依賴對象在對象創(chuàng)建后被替換。

  3. 接口注入(Interface Injection):對象通過實現(xiàn)特定接口,從而暴露用于注入依賴對象的方法。容器在創(chuàng)建對象后,會調(diào)用接口方法并注入依賴對象。

依賴注入的優(yōu)點包括:

  1. 松耦合:依賴對象與被依賴對象之間的耦合度降低,對象的職責更加單一,易于理解和維護。

  2. 可測試性:依賴注入使得測試變得更加容易??梢酝ㄟ^注入模擬對象(Mock Objects)來進行單元測試和模塊測試。

  3. 可重用性:通過依賴注入,依賴對象可以被多個對象共享和重用,避免了重復創(chuàng)建和管理相同的依賴對象。

  4. 可擴展性:依賴注入使得應用程序的組件之間的關系更加靈活,可以輕松添加、替換和升級依賴對象。

現(xiàn)代的開發(fā)框架和容器(如Spring框架、Spring BootGoogle Guice)提供了依賴注入的實現(xiàn)。它們通過注解、配置文件或其他方式,實現(xiàn)了依賴注入的自動化和便利性,使得開發(fā)者可以專注于業(yè)務邏輯的實現(xiàn)而不必過多關注依賴對象的創(chuàng)建和管理。

給出依賴的三種注入的方式的示例

當談到依賴注入的三種主要方式時(構(gòu)造函數(shù)注入、Setter方法注入和接口注入),我將為你提供每種方式的示例代碼。

  1. 構(gòu)造函數(shù)注入(Constructor Injection)的示例:
public class UserService {
    private UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

在上面的示例中,UserService類通過構(gòu)造函數(shù)接收一個UserRepository依賴對象,并將其賦值給成員變量userRepository。這種方式可以在創(chuàng)建UserService對象時,將UserRepository的實例傳遞給構(gòu)造函數(shù)來進行注入。

  1. Setter方法注入(Setter Injection)的示例:
public class UserService {
    private UserRepository userRepository;

    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

在上述示例中,UserService類通過Setter方法 setUserRepository() 接收一個UserRepository依賴對象,并將其賦值給成員變量userRepository。這樣,在創(chuàng)建UserService對象后,可以調(diào)用setUserRepository()方法來注入UserRepository的實例。

  1. 接口注入(Interface Injection)的示例:
public interface DiscountService {
    void setDiscountProvider(DiscountProvider discountProvider);
}

public class DiscountServiceImpl implements DiscountService {
    private DiscountProvider discountProvider;

    @Override
    public void setDiscountProvider(DiscountProvider discountProvider) {
        this.discountProvider = discountProvider;
    }

    // ...
}

在上述示例中,DiscountService是一個接口,定義了一個setDiscountProvider()方法,用于接收DiscountProvider依賴對象。DiscountServiceImpl類實現(xiàn)了該接口,并通過實現(xiàn)方法setDiscountProvider()來注入DiscountProvider的實例。

這些示例展示了依賴注入的不同方式,通過構(gòu)造函數(shù)、Setter方法或接口方法來接收依賴對象,并將其賦值給類的成員變量或?qū)傩浴T趯嶋H應用中,通常會結(jié)合使用這些方式,根據(jù)具體的需求和場景選擇適合的注入方式。

從概念上講講自動注入

自動注入(Autowired)依賴注入(Dependency Injection,DI)的一種實現(xiàn)方式,最早由Spring框架引入并提出。

傳統(tǒng)的依賴注入方式中,開發(fā)人員需要顯式地在代碼中聲明依賴關系并手動進行依賴對象的注入。這種方式需要編寫大量的重復代碼,并且容易出錯。

為了簡化依賴注入的過程,Spring框架引入了自動注入的概念。自動注入允許開發(fā)人員使用特定的注解來標記依賴對象,而無需顯式地進行依賴注入的代碼編寫。框架會自動查找和注入匹配的依賴對象,減少了手動注入的工作量,提高了開發(fā)效率。

自動注入的概念最早在Spring框架的早期版本中被提出。通過在目標類的字段、構(gòu)造函數(shù)或Setter方法上添加@Autowired注解,Spring容器會在創(chuàng)建對象時自動查找匹配的依賴對象,并將其注入到相應的位置。自動注入是根據(jù)類型進行匹配的,如果存在多個匹配的依賴對象,可以使用@Qualifier注解或通過名稱來指定具體的依賴對象。

自動注入帶來了以下好處:

  1. 簡化開發(fā):自動注入減少了手動注入的代碼量,使代碼更簡潔和易于維護。

  2. 減少配置:開發(fā)人員無需手動配置每個依賴對象的注入,框架會自動完成依賴的查找和注入。

  3. 提高可測試性:通過自動注入,可以更容易地進行單元測試,可以輕松地替換依賴對象進行測試。

Spring框架的自動注入成為了它的核心特性之一,并且受到了廣泛的應用和認可。后續(xù)的框架和技術也借鑒了Spring的自動注入概念,提供了類似的功能來簡化依賴注入的過程。

Spring Boot中注解@Autowired,自動注入注解默認使用哪種注入方式

@Autowired注解可以使用以下幾種依賴注入的方式:

  1. 按照類型進行注入(byType):這是@Autowired注解的默認方式,它會根據(jù)屬性的類型在容器中查找對應的Bean,如果找到唯一的一個Bean,則進行注入。如果沒有找到或者找到多個相同類型的Bean,則會拋出異常。這種方式可以用在字段、構(gòu)造方法或者setter方法上。

  2. 按照名稱進行注入(byName):這種方式需要配合@Qualifier注解來指定Bean的名稱,它會根據(jù)屬性的名稱在容器中查找對應的Bean,如果找到則進行注入。如果沒有找到,則會拋出異常。這種方式可以用在字段、構(gòu)造方法或者setter方法上。

  3. 按照構(gòu)造方法進行注入(constructor):這種方式是通過Bean對象的構(gòu)造方法參數(shù)類型和容器中的Bean類型進行匹配,如果找到唯一的一個相同類型的Bean,則通過構(gòu)造方法進行注入。如果沒有找到或者找到多個相同類型的Bean,則會拋出異常。這種方式只能用在構(gòu)造方法上。

一般來說,按照類型進行注入最常用和方便的方式,但是如果你需要更精確地指定要注入的Bean,或者你想保證依賴對象不為空,那么你可以使用按照名稱或者按照構(gòu)造方法進行注入。

給我一些上面自動注入的簡單示例

好的,我將給你一些簡單的示例。

按照類型進行注入的示例(大部分用的都是這種):

@Component
public class FooService {
  //在字段上使用@Autowired注解,按照類型進行注入
  @Autowired
  private FooFormatter fooFormatter;
}

@Component
public class FooFormatter {
  public String format() {
    return "foo";
  }
}

按照名稱進行注入的示例:

@Component
public class BarService {
  //在字段上使用@Autowired和@Qualifier注解,按照名稱進行注入
  @Autowired
  @Qualifier("barFormatter")
  private BarFormatter barFormatter;
}

@Component("barFormatter")
public class BarFormatter {
  public String format() {
    return "bar";
  }
}

按照構(gòu)造方法進行注入的示例:

@Component
public class BazService {
  private BazFormatter bazFormatter;

  //在構(gòu)造方法上使用@Autowired注解,按照類型進行注入
  @Autowired
  public BazService(BazFormatter bazFormatter) {
    this.bazFormatter = bazFormatter;
  }
}

@Component
public class BazFormatter {
  public String format() {
    return "baz";
  }
}

依賴注入和自動注入的關聯(lián)以及不同點

依賴注入(Dependency Injection,簡稱DI)和自動注入(Autowired)相關但不完全相同的概念。下面我將解釋它們之間的關聯(lián)和不同點:

關聯(lián)

  1. 自動注入是依賴注入的一種實現(xiàn)方式。自動注入是指在容器啟動或?qū)ο髣?chuàng)建時,容器自動將所需的依賴對象注入到目標對象中,而無需手動顯式地進行依賴注入

  2. Spring框架及其衍生的Spring Boot中,使用@Autowired注解實現(xiàn)自動注入。通過在目標對象的字段、構(gòu)造函數(shù)或Setter方法上使用@Autowired注解,Spring容器會根據(jù)類型或名稱自動查找并注入相應的依賴對象。

不同點:

  1. 控制權(quán)依賴注入是一種設計模式,強調(diào)將依賴對象的創(chuàng)建和管理責任轉(zhuǎn)移到外部容器中。在依賴注入中,對象聲明自己需要的依賴,但并不負責創(chuàng)建或獲取依賴對象。相反,自動注入是依賴注入的一種具體實現(xiàn)方式,它是由容器在對象創(chuàng)建時自動完成依賴對象的注入。

  2. 顯式性依賴注入通常需要在代碼中顯式地聲明依賴關系,即通過構(gòu)造函數(shù)、Setter方法或接口方法來接收依賴對象。這樣可以清晰地表達對象之間的依賴關系。而自動注入不需要顯式地聲明依賴關系,容器會自動根據(jù)配置或默認規(guī)則完成注入。

  3. 靈活性:依賴注入提供了更大的靈活性,允許對象在創(chuàng)建后替換依賴對象,或者在不同的環(huán)境中使用不同的依賴對象。通過手動注入,可以更容易地進行單元測試和模塊替換。相比之下,自動注入的靈活性相對較低,依賴對象的選擇通常由容器的配置或規(guī)則確定。

總結(jié)來說,依賴注入是一種設計模式,強調(diào)通過外部容器將依賴對象注入到目標對象中,以提高代碼的可維護性和可測試性。

自動注入是依賴注入的一種具體實現(xiàn)方式,它通過使用@Autowired注解或其他類似的機制,在對象創(chuàng)建時自動完成依賴對象的注入。自動注入減少了手動注入的代碼量,但相對來說可能犧牲了一些靈活性。

Spring Boot中,可以使用@Autowired注解實現(xiàn)自動注入,從而簡化依賴注入的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-459631.html

到了這里,關于SpringBoot中的依賴注入和自動注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Springboot依賴注入Bean的三種方式,final+構(gòu)造器注入Bean

    @Autowired注解的一大使用場景就是Field Injection。 通過Java的反射機制實現(xiàn),所以private的成員也可以被注入具體的對象 優(yōu)點 代碼少,簡潔明了。 新增依賴十分方便,不需要修改原有代碼 缺點 容易出現(xiàn)空指針異常。Field 注入允許構(gòu)建對象實例時依賴的對象為空,導致空指針異常

    2024年02月02日
    瀏覽(22)
  • 深入理解WPF中的依賴注入和控制反轉(zhuǎn)

    深入理解WPF中的依賴注入和控制反轉(zhuǎn)

    在WPF開發(fā)中, 依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是程序解耦的關鍵,在當今軟件工程中占有舉足輕重的地位,兩者之間有著密不可分的聯(lián)系 。今天就以一個簡單的小例子,簡述如何在WPF中實現(xiàn)依賴注入和控制反轉(zhuǎn),僅供學習分享使用,如有不足之處

    2024年02月06日
    瀏覽(21)
  • VS依賴注入(DI)構(gòu)造函數(shù)自動生成局部私有變量

    VS依賴注入(DI)構(gòu)造函數(shù)自動生成局部私有變量

    依賴注入(DI)在開發(fā)中既是常見的也是必需的技術。它幫助我們優(yōu)化了代碼結(jié)構(gòu),使得應用更加靈活、易于擴展,同時也降低了各個模塊之間的耦合度,更容易進行單元測試,提高了編碼效率和質(zhì)量。我們經(jīng)常會先定義局部變量,再在構(gòu)造函數(shù)中使用,每次都要這樣去編寫耗時

    2024年02月11日
    瀏覽(23)
  • 了解Spring中的依賴注入:@Autowired vs. @Resource

    在Spring框架中,依賴注入是一項關鍵的特性,通過它,我們能夠更靈活、更方便地管理和使用各種組件。在依賴注入的實現(xiàn)中, @Resource 和 @Autowired 是兩個常用的注解,它們分別具有不同的特點和用途。在本篇博客中,我們將深入探討這兩個注解的功能、優(yōu)缺點,并提供一些

    2024年02月02日
    瀏覽(33)
  • Springboot 入門指南:控制反轉(zhuǎn)和依賴注入的含義和實現(xiàn)方式

    目錄 一、什么是控制反轉(zhuǎn)(IoC)? 二、什么是依賴注入(DI)? 三、如何在 springboot 中使用 IoC 和 DI? 總結(jié) 控制反轉(zhuǎn)(Inversion of Control,簡稱 IoC)是一種設計原則,它的目的是降低代碼之間的耦合度,提高模塊化和可測試性??刂品崔D(zhuǎn)的含義是,將對象的創(chuàng)建、配置和管理

    2024年02月11日
    瀏覽(29)
  • 基于Xml方式Bean的配置-Bean的依賴注入以及·自動裝配

    基于Xml方式Bean的配置-Bean的依賴注入以及·自動裝配

    Bean的依賴注入方式 注入方式 配置方式 通過Bean的set方法注入 通過構(gòu)造Bean的方法進行注入 其中,ref是reference的縮寫形式,翻譯為:涉及,參考的意思,用于引用其它Bean的id,value用于指定屬性值 注入數(shù)據(jù)類型 普通數(shù)據(jù)類型:String、int、boolean,通過value屬性指定 引用數(shù)據(jù)類型

    2024年02月07日
    瀏覽(27)
  • 如何在.net6webapi中實現(xiàn)自動依賴注入

    如何在.net6webapi中實現(xiàn)自動依賴注入

    IOC(Inversion of Control)控制反轉(zhuǎn): 控制反正是一種設計思想,旨在將程序中的控制權(quán)從程序員轉(zhuǎn)移到了容器中。容器負責管理對象之間的依賴關系,使得對象不再直接依賴于其他對象,而是通過依賴注入的方式來獲取所需的資源。 DI(Dependency Injection)依賴注入: 他是IOC的具

    2024年02月08日
    瀏覽(20)
  • 【Spring進階系列丨第五篇】詳解Spring中的依賴注入

    【Spring進階系列丨第五篇】詳解Spring中的依賴注入

    全稱 Dependency Injection(DI) 與IoC的關系 IoC和DI其實說的是一個意思,可以這么說: IoC是一種思想,DI是對這種思想的一種具體實現(xiàn) 依賴關系的管理 以后都交給spring來維護,在當前類需要用到其他類的對象,由spring為我們提供,我們只需要在配置文件中說明。 依賴關系的維護

    2024年02月04日
    瀏覽(35)
  • SpringBoot項目報錯:org.springframework.beans.factory.UnsatisfiedDependencyException依賴注入異常(已解決)

    SpringBoot項目報錯:org.springframework.beans.factory.UnsatisfiedDependencyException依賴注入異常(已解決)

    ? ? ?? 目錄 報錯信息 可能原因 結(jié)論 ????????最近在學Spring Boot,今天在做Spring Boot + Mybatis Plus + Vue項目時啟動后端報錯: ? ? ? ? 先看報錯信息,說出現(xiàn)了一個 依賴注入異常(UnsatisfiedDependencyException) ,在創(chuàng)建名為 \\\'loginController\\\' 的bean時出錯,并且問題出現(xiàn)在字段 \\\'

    2024年02月11日
    瀏覽(25)
  • Vue 中的依賴注入,特別是 Provide 和 Inject,它們的原理、用法和示例

    Vue.js 作為一款現(xiàn)代的前端 JavaScript 框架,提供了諸多方便開發(fā)的特性。其中依賴注入是一個非常有用的功能,可以在組件樹中傳遞數(shù)據(jù)和方法,并使得組件之間的耦合度更低。本文將介紹 Vue 中的依賴注入,特別是 Provide 和 Inject,它們的原理、用法和示例。 在軟件開發(fā)中,

    2024年02月06日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包