欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Bean三種注入方式詳解

 更新時(shí)間:2017年11月08日 09:05:53   作者:民團(tuán)司令  
本篇文章主要介紹了Spring Bean三種注入方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

在Spring容器中為一個(gè)bean配置依賴注入有三種方式:

  1.  使用屬性的setter方法注入  這是最常用的方式;
  2.  使用構(gòu)造器注入;
  3.  使用Filed注入(用于注解方式).

Field注入是最常見的一種方式,可以采用 @Autowired 對(duì)Bean類的接口進(jìn)行初始化,代碼如下

@ContextConfiguration({"/META-INF/spring/amazing-base.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringInjectionTest {
  @Autowired
  private Cust normalCust;
  
  @Test
  public void testFieldInjection() {
    System.out.println("testFieldInjection begin");
    normalCust.recharge();
    System.out.println("testFieldInjection end");
  }
}

Cust為接口,NormalCust為其實(shí)現(xiàn)類,通過這種方式,可以通過Spring容器初始化NormalCust Bean,進(jìn)而調(diào)用recharge()方法。

構(gòu)造器注入主要用于某些類因?yàn)槟撤N原因不能作為Bean,只是一個(gè)普通類??梢酝ㄟ^類的構(gòu)造方法傳入需要調(diào)用的Bean接口。

@ContextConfiguration({"/META-INF/spring/amazing-base.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringInjectionTest {
  @Autowired
  private Cust normalCust;
  
  @Test
  public void testConstructorInjection() {
    System.out.println("testConstructorInjection begin");
    ChargeThread thread = new ChargeThread(normalCust);
    thread.run();
    System.out.println("testConstructorInjection end");
  }
  
}
public class ChargeThread implements Runnable {
  
  private Cust cust;
  
  public ChargeThread(Cust cust) {
    this.cust = cust;
  }

  public void run() {
    cust.recharge();
  }

}

上面的代碼通過初始化一個(gè)線程,在初始化的時(shí)候傳入Bean,在線程的類中調(diào)用Bean的充值方法。構(gòu)造器注入特別適合多線程的編程,因?yàn)榫€程不能定義為Bean,否則不僅會(huì)因?yàn)樗且粋€(gè)單例,而且會(huì)被Spring容器管理。(當(dāng)然你可以去定義Bean為原型Bean,能夠有多個(gè)副本,脫離Spring容器的管理),最重要的是我們要用線程池,由線程池來管理線程。

還有一種Setter方法注入,這種方式能用于final類的靜態(tài)方法,例如有一個(gè)充值的Util類,該類是final類,其方法是靜態(tài)方法。

public class SpringInjectionTest {
  @Test
  public void testSetterInjection() {
    System.out.println("testSetterInjection begin");
    String result = RechargeUtil.InstantRecharge();
    System.out.println("testSetterInjection end, " + result);
  }

}

@Component
public final class RechargeUtil {
  
  private RechargeUtil() {
    
  }
  
  private static Cust normalCust;
  
  @Autowired
  public void setNormalCust(Cust normalCust) {
    RechargeUtil.normalCust = normalCust;
  }

  public static String InstantRecharge() {
    normalCust.recharge();
    return "InstantRecharge Success!";
  }
}

最后一種方式也成功了將normalCust注入到了RechargeUtil中。

以上三種注入方式,讀者可以根據(jù)實(shí)際應(yīng)用場景靈活選擇。也希望大家多多支持腳本之家。

相關(guān)文章

  • Java在Map轉(zhuǎn)Json字符串時(shí)出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法

    Java在Map轉(zhuǎn)Json字符串時(shí)出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法

    當(dāng)一個(gè)Map被轉(zhuǎn)成Json字符串后,被添加到另一個(gè)Map中,會(huì)出現(xiàn)被加上“\”轉(zhuǎn)義字符的情況,這個(gè)時(shí)候該如何解決呢,下面就來和小編一起了解一下
    2023-07-07
  • Java開啟線程的四種方法案例詳解

    Java開啟線程的四種方法案例詳解

    這篇文章主要介紹了Java開啟線程的四種方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Spring Cloud實(shí)現(xiàn)提供API給客戶端的方法詳解

    Spring Cloud實(shí)現(xiàn)提供API給客戶端的方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring Cloud實(shí)現(xiàn)提供API給客戶端的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 關(guān)于cron表達(dá)式每天整點(diǎn)執(zhí)行一次的問題

    關(guān)于cron表達(dá)式每天整點(diǎn)執(zhí)行一次的問題

    這篇文章主要介紹了關(guān)于cron表達(dá)式每天整點(diǎn)執(zhí)行一次的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring Boot web項(xiàng)目的TDD流程

    Spring Boot web項(xiàng)目的TDD流程

    TDD(Test-driven development) 測試驅(qū)動(dòng)開發(fā),簡單點(diǎn)說就是編寫測試,再編寫代碼。這是首要一條,不可動(dòng)搖的一條,先寫代碼后寫測試的都是假TDD。
    2021-05-05
  • SpringMVC全局異常處理的三種方式

    SpringMVC全局異常處理的三種方式

    這篇文章主要介紹了SpringMVC全局異常處理的三種方式,幫助大家更好的理解和使用springmvc,感興趣的朋友可以了解下
    2021-01-01
  • 深入了解Java SpringBoot自動(dòng)裝配原理

    深入了解Java SpringBoot自動(dòng)裝配原理

    在使用springboot時(shí),很多配置我們都沒有做,都是springboot在幫我們完成,這很大一部分歸功于springboot自動(dòng)裝配。本文將詳細(xì)為大家講解SpringBoot的自動(dòng)裝配原理,需要的可以參考一下
    2022-03-03
  • SpringBoot項(xiàng)目攔截器獲取Post方法的請求body實(shí)現(xiàn)

    SpringBoot項(xiàng)目攔截器獲取Post方法的請求body實(shí)現(xiàn)

    本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請求body,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java 靜態(tài)數(shù)據(jù)初始化的示例代碼

    Java 靜態(tài)數(shù)據(jù)初始化的示例代碼

    這篇文章主要介紹了Java 靜態(tài)數(shù)據(jù)初始化的示例代碼,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • Java經(jīng)典排序算法之冒泡排序代碼實(shí)例

    Java經(jīng)典排序算法之冒泡排序代碼實(shí)例

    這篇文章主要介紹了Java經(jīng)典排序算法之冒泡排序代碼實(shí)例,相鄰兩元素進(jìn)行比較,如過左側(cè)元素大于右側(cè)元素,則進(jìn)行交換,每完成一次循環(huán)就將最大元素排在最后,下一次循環(huán)是將其它的數(shù)進(jìn)行類似操作,需要的朋友可以參考下
    2023-11-11

最新評(píng)論