@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,如果没有隐式赋值的话。