2012-04-17 30 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,如果没有隐式分配。

相关问题