2010-02-09 44 views
1

當您使用Autowire註釋標記某些內容時,您說您想要這個特定的例如類將自動連接到DI。當使用Autowire時,你在哪裏設置你想連接的bean?

現在您究竟在哪裏設置了在Autowire中使用的目標類?

參考:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config在下面這個例子

所以,你自動裝配的setter:

public class SimpleMovieLister { 

    private MovieFinder movieFinder; 

    @Required 
    public void setMovieFinder(MovieFinder movieFinder) { 
     this.movieFinder = movieFinder; 
    } 

    // ... 
} 

會彈出只是搜索實現接口的MovieFinder任何類?

回答

5

會彈出只是搜索任何類 實現接口 的MovieFinder?

基本上,是的。當它發現多於一個時,它會變得有趣,在這種情況下,它會在上下文啓動時拋出異常,除非您採取措施來幫助它。

有3種方法來解決多個自動裝配候選人:

  • 馬克那些你autowire-candidate="false"自動裝配。
  • 馬克一個你primary="true"
  • 自動裝配限定@Autowired註釋通過指定@Qualifier("TheBeanIWant")

以上任何一項都可以工作,你挑選適合您的情況最好的一個。

@Qualifier("TheBeanIWant")@Resource(name="TheBeanIWant")都頗爲相似,所不同的是@Qualifier幫助春縮小時自動連接,而@Resource通過名稱明確挑選出一個bean,無論其類型。

3

如果上下文中有一個類型爲MovieFinder的bean,它將被注入。如果該類型有多個bean,則會引發異常。

在構造函數注入的情況下,@Autowired(和我假設的@Required)只是autowire-by-type。

如果要明確指定使用註釋的名稱,使用@Resource(name="beanId")

+1

它的一切都在一個地方有時也就是xml文件 – Blankman 2010-02-09 19:08:40

+0

好吧,不,如果你掌握它們,註釋是非常有意義的。 – Bozho 2010-02-09 19:12:02

+0

我看,如果你有1+個實現,你說你可以指定beanId,但是你需要用XML聲明bean,或者你可以通過註釋來設置beanID? – Blankman 2010-02-09 21:06:17

相關問題