我沒有看到兩種方式之間的區別,@Qualifier總是與@Autowired一起使用。@Qualifier和@Resource之間的區別
@Autowired
@Qualifier("alpha")
VS
@Resource(name="alpha")
任何人都可以讓我知道有什麼區別?謝謝!
我沒有看到兩種方式之間的區別,@Qualifier總是與@Autowired一起使用。@Qualifier和@Resource之間的區別
@Autowired
@Qualifier("alpha")
VS
@Resource(name="alpha")
任何人都可以讓我知道有什麼區別?謝謝!
@Autowired
可以單獨使用。如果單獨使用,它將按類型連線。因此,如果在容器中聲明瞭多個相同類型的Bean,則@Autowired
不知道要使用哪個bean注入的問題。因此,請使用@Qualifier
和@Autowired
一起說明通過指定bean名稱(通過名稱連接)實際連接的bean。
@Resource
也通過名稱連接。因此,如果@Autowired
與@Qualifier
一起使用,則與@Resource
相同。
區別在於@Autowired
和@Qualifier
是彈簧註釋,而@Resource
是標準java註釋(來自JSR-250)。另外,@Resource
只支持字段和setter注入,而@Autowired
支持字段,setter,構造函數和多參數方法注入。
建議使用@Resource
進行字段和setter注入。堅持使用@Qualifier
和@Autowired
作構造函數或多參數方法注入。
見this:
如果要表達的名字註解驅動的注入,不 主要使用@Autowired - 即使是在技術上能夠通過@Qualifier值指 一個bean的名字。相反,更喜歡JSR-250 @資源註釋,它的語義定義是通過其唯一的名稱來標識特定的目標組件,其中聲明的類型 與匹配過程無關。
它在哪裏說的?如果你想通過名字自動裝載,我發現它說要使用它,我不知道它在哪裏建議使用資源(在某些情況下它實際上不會工作)。 – 2012-02-02 03:04:42
更新。它在3.11.3的提示部分中說過 – 2012-02-02 03:11:41
@Autowired是老派的春天。 @Resource是Java EE CDI標準。 Spring處理這兩個(以及@Inject,這非常相似),並且在兩種情況下都做了幾乎相同的事情。我會推薦@Resource,@Autowired是在標準之前制定的,並且似乎主要是爲了向後兼容性而提供支持。
所以你的意思是@Resource是當前的春季標準。我們應該在我們的Spring beans中使用@Resource而不是@ Autowired – 2017-07-18 06:49:39
我面臨着@Autowired一些問題,然後使用@Qualifier開始,我終於能夠找出定義相同類型的多個Bean時用於@Autowired @Qualifier用。
假設你定義2種豆同一類型但不同的價值觀:
<bean id="appContext1" class="com.context.AppContext">
<constructor-arg value="abc" />
<bean/>
<bean id="appContext2" class="com.context.AppContext">
<constructor-arg value="ABC" />
<bean/>
然後,如果你只是要使用@Autowire,那麼你必須使用相同的變量名作爲bean名字否則它的會發現多個類型的錯誤。
@Autowired
AppContext appContext;
對於上述用例,您必須使用限定符。
@Autowired
@Qualifier("appContext1")
AppContext appContext;
而是,如果使用與bean名稱相同的變量名稱,則可以消除@Qualifier的使用。
@Autowired
AppContext appContext1;
我總是使用變量名同bean的名字,卻意外地有一些其他的變量名和麪臨這個問題。
讓我知道是否有任何疑問。
[@Resource vs @Autowired]可能的重複(http://stackoverflow.com/questions/4093504/resource-vs-autowired) – skaffman 2012-02-02 09:24:06