@Component和@Named都是同一个bean类

在Spring应用程序中充当bean的类是否同时需要@Component@Named

如果两者都这样使用有什么意义?

我尝试搜索网络,并看到这些注释的标准文档,发现它们有点令人困惑。

如果@Named注释没有为bean指定任何名称,最后应用程序采用哪个名称?

@Component@Named是基本上做同样事情的注释,但来自不同的API。

@Component属于Spring API。 它将类标记为自动检测为bean,并可选择允许您指定该bean的名称( @Component("foo") )。 如果没有明确的名称规范,bean将获得从其类名称派生的默认名称。

@Named属于javax.inject API。 它将类标记为自动检测为bean,并要求您指定名称。

Spring支持这两种API。 在同一个类中使用两个注释没有意义,因为它们提供相同的function。

也可以看看:

  • 3.10类路径扫描和托管组件

Spring支持@Named注释(JSR-330)作为@Component (Spring)的替代品。

一般来说,@ @Named的命名很差,因为它没有描述它的作用,所以我更愿意随时使用@Component

应该使用两者中的任何一个。 使用@Component和@Named没有任何意义。 添加上面的(Other)注释@Component(“[someComponentID]”)和@Named(“[someNamedID]”)通过在括号中传递ID来为bean分配ID,如果没有隐式赋值的话。