第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

春季:為什么我們要自動裝配接口而不是實現(xiàn)的類?

春季:為什么我們要自動裝配接口而不是實現(xiàn)的類?

拉丁的傳說 2019-12-07 16:12:50
例interface IA{  public void someFunction();}@Resource(name="b")class B implements IA{  public void someFunction()  {    //busy code block  }  public void someBfunc()  {     //doing b things  }}@Resource(name="c")class C implements IA{  public void someFunction()  {    //busy code block  }  public void someCfunc()  {     //doing C things  }}class MyRunner{  @Autowire  @Qualifier("b")   IA worker;  worker.someFunction();}誰可以給我解釋一下這個。spring如何知道要使用哪種多態(tài)類型。我需要@Qualifier還是@Resource?為什么我們要對接口而不是已實現(xiàn)的類進行自動裝配?
查看完整描述

2 回答

?
萬千封印

TA貢獻1891條經(jīng)驗 獲得超3個贊

spring如何知道要使用哪種多態(tài)類型。


只要接口只有一個實現(xiàn),并且該實現(xiàn)在@Component啟用了Spring的組件掃描的情況下進行注釋,Spring框架就可以找出(接口,實現(xiàn))對。如果未啟用組件掃描,則必須在application-config.xml(或等效的spring配置文件)中顯式定義Bean。


我需要@Qualifier或@Resource嗎?


一旦擁有多個實現(xiàn),就需要對每個實現(xiàn)進行限定,并且在自動裝配期間,需要使用@Qualifier注釋將正確的實現(xiàn)以及@Autowired注釋注入。如果使用@Resource(J2EE語義),則應(yīng)使用name此批注的屬性指定Bean名稱。


為什么我們要對接口而不是已實現(xiàn)的類進行自動裝配?


首先,一般來說,對接口進行編碼始終是一個好習(xí)慣。其次,在spring的情況下,您可以在運行時注入任何實現(xiàn)。一個典型的用例是在測試階段注入模擬實現(xiàn)。


interface IA

{

  public void someFunction();

}



class B implements IA

{

  public void someFunction()

  {

    //busy code block

  }

  public void someBfunc()

  {

     //doing b things

  }

}



class C implements IA

{

  public void someFunction()

  {

    //busy code block

  }

  public void someCfunc()

  {

     //doing C things

  }

}


class MyRunner

{

     @Autowire

     @Qualifier("b") 

     IA worker;


     ....

     worker.someFunction();

}

您的bean配置應(yīng)如下所示:


<bean id="b" class="B" />

<bean id="c" class="C" />

<bean id="runner" class="MyRunner" />

或者,如果在存在這些組件的軟件包上啟用了組件掃描,則應(yīng)按以下步驟對每個類別進行限定@Component:


interface IA

{

  public void someFunction();

}


@Component(value="b")

class B implements IA

{

  public void someFunction()

  {

    //busy code block

  }

  public void someBfunc()

  {

     //doing b things

  }

}



@Component(value="c")

class C implements IA

{

  public void someFunction()

  {

    //busy code block

  }

  public void someCfunc()

  {

     //doing C things

  }

}


@Component    

class MyRunner

{

     @Autowire

     @Qualifier("b") 

     IA worker;


     ....

     worker.someFunction();

}

然后worker在MyRunner中將注入type的實例B。


查看完整回答
反對 回復(fù) 2019-12-07
  • 2 回答
  • 0 關(guān)注
  • 1236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號