2013-02-25 137 views
6

在Spring中有兩個單獨的註釋來按名稱執行依賴注入,javax.annotation.Resourcejavax.inject.Named。該documentation at Spring表示@Resource應使用注射用名:Spring依賴注入,使用@Named或@Resource?

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

以上是有點混亂,因爲Spring僅主張@Resource代替@Autowired@Qualifer組合。在later in the documentation之前沒有提及@Named

JSR-250定義了@Resource,而JSR-330定義了@Inject@Named。我知道他們可以很容易地在Spring中混合搭配。使用哪個JSR?

似乎可移植性與Guice和CDI會很好,因此可以使用JSR-330註釋。另一方面,當使用JSR-330註釋時,文檔中還指出了Spring中幾個limitations

注射按名稱註釋的最佳實踐(如果有的話)是什麼?

謝謝。

+1

所提及的限制僅僅是指Spring將如何使用這些註釋,以及Spring如何引入註釋對於Spring的具體操作更加健壯。 – 2013-02-25 16:55:43

+0

這些限制似乎並不那麼繁重。儘管它們確實存在。如果Spring也採用了額外的CDI註釋,似乎很多情況會更簡單。 – Saish 2013-02-25 17:32:59

回答

1

@Resource比Spring 2.5更老,並且支持它,而Spring 3.0中已經添加了@Named支持,並且它們都可以用於實現注入名稱的相同目的。

當使用Spring時,我比較喜歡使用Spring的關注點是與Spring 2.5的向後兼容性,以及是否可以在類路徑上添加/假定是否有javax.inject。

+0

@Inject @Named(「beanName」)在Spring 3.0.7中不起作用,但@Resource(name =「beanName」)做。 – 2014-09-10 08:04:01

+0

類路徑中是javax.inject還是javaee-api jar?只要確保它是因爲自Spring 3.0.0以來已經添加了對支持\ @Inject和\ @Named的支持。 – 2014-09-15 01:14:45