2012-04-17 96 views
23

在Spring應用程序中充當bean的類是否同時需要@Component@Named對於同一個Bean類@Component和@Named

如果同時使用兩者,意義何在?

我試着搜索網絡以及看到這些註釋的標準文檔,發現它們有點混亂。

最後,如果@Named註釋沒有爲該bean指定任何名稱,應用程序將採用哪個名稱?

回答

44

@Component@Named是註釋,基本上做同樣的事情,但來自不同的API。

@Component屬於Spring API。它將類標記爲自動檢測爲bean,並且可以選擇允許您指定該bean的名稱(@Component("foo"))。如果沒有明確的名稱說明,檢測到的bean將得到一個從其類的名稱派生的默認名稱。

@Named屬於javax.inject API。它將類標記爲自動檢測爲bean,並要求您指定一個名稱。

Spring支持這兩種API。因爲它們提供相同的功能,所以在同一個類中使用兩個註釋都沒有意義。

參見:

4

Spring支持@Named註解(JSR-330)來替代@Component(彈簧)。

一般來說,@Named的名字很差,因爲沒有描述它的功能,所以我寧願在任何時候都使用@Component

+0

同意,(a)名字命名不好。然而,許多類是不同框架項目之間的共享資源。使用@Named來bean-ify這個類需要javax.injection作爲每個應用程序的一個依賴項,比另一個依賴於Spring的框架要好得多。 – Freestyle076 2017-10-12 21:39:36

0

兩者都應該使用。 使用@Component和@Named都沒有任何意義。 添加到上面(其他)的註釋@Component(「[someComponentID]」)和@Named(「[someNamedID]」)通過在括號中傳遞ID來爲bean分配ID,如果沒有隱式分配。

相關問題