2012-08-06 87 views
43

在彈簧最新版本中,我們可以使用註釋自動裝配一個豆,如@Autowired。這將使用它的類型(或構造函數,如果應用它)自動裝載bean。 有什麼辦法可以使用@Autowired基於我們在Spring的XML文件中沒有註釋的bean名稱的註釋:autowire =「byName」按名稱使用註釋自動裝配彈簧豆

回答

41

您可以使用可以使用JSR-250 @Resource進行名稱bean自動裝配,除非需要構造器注入或多參數方法被拒絕。。

從文檔:

如果要表達的名字註解驅動的注入,不主要使用@Autowired,即使在技術上是能夠通過@Qualifier值指的是bean的名字。相反,使用JSR-250 @Resource註釋,該註釋在語義上定義爲通過其唯一名稱來標識特定的目標組件,並且聲明的類型與匹配過程無關。

86

您可以使用:

@Autowired 
@Qualifier("beanname") 

按照@Qualifier javadoc

此註釋可以在現場或參數作爲候選豆預選賽自動裝配時

+1

很棒的發現。這並不明顯。 – ATrubka 2015-08-27 16:35:49

+1

應該不是'@ Autowired'而不是'@ Autowire'? – user3114157 2016-11-25 10:16:54

1

我在使用bean名稱代理,這個代理搞亂了名稱的自動裝配。 @Resource沒有這個問題,因爲它不關心類型。所以現在我知道Spring開發人員推薦這個建議的原因之一:-)只是FYI

+0

在Spring文檔中提到了另外一個原因:......本身被定義爲集合或映射類型的bean不能通過@Autowired注入,因爲類型匹配不適用於它們。 – rwitzel 2014-01-03 13:39:37

2

如果你想定義它們將在DI容器中註冊的bean的名字,你可以在註釋本身中傳遞這個名字,例如@Service(「employeeManager」)。

然後使用下面的代碼,你可以按名稱

@Autowired 
@Qualifier("employeeManager") 
private EmployeeManagerService employeeManagerService; 
1

使用@Component( 「beanname」)在bean的Java類定義

然後同時自動裝配使用JSR 330

啓用自動連線

@Inject @Named(Value =「beanname」)