最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

春季:為什么我們要自動(dòng)裝配接口而不是實(shí)現(xiàn)的類(lèi)?

春季:為什么我們要自動(dòng)裝配接口而不是實(shí)現(xiàn)的類(lèi)?

拉丁的傳說(shuō) 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();}誰(shuí)可以給我解釋一下這個(gè)。spring如何知道要使用哪種多態(tài)類(lèi)型。我需要@Qualifier還是@Resource?為什么我們要對(duì)接口而不是已實(shí)現(xiàn)的類(lèi)進(jìn)行自動(dòng)裝配?
查看完整描述

2 回答

?
萬(wàn)千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

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


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


我需要@Qualifier或@Resource嗎?


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


為什么我們要對(duì)接口而不是已實(shí)現(xiàn)的類(lèi)進(jìn)行自動(dòng)裝配?


首先,一般來(lái)說(shuō),對(duì)接口進(jìn)行編碼始終是一個(gè)好習(xí)慣。其次,在spring的情況下,您可以在運(yùn)行時(shí)注入任何實(shí)現(xiàn)。一個(gè)典型的用例是在測(cè)試階段注入模擬實(shí)現(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)按以下步驟對(duì)每個(gè)類(lèi)別進(jìn)行限定@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的實(shí)例B。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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