在Spring应用程序中充当bean的类是否同时需要@Component
和@Named
?
如果两者都被使用,有什么意义?
我尝试搜索网络并查看这些注释的标准文档,发现它们有点令人困惑。
如果@Named
注释没有为bean指定任何名称,应用程序最终会使用哪个名称?
答案 0 :(得分:53)
@Component
和@Named
是基本上做同样事情的注释,但来自不同的API。
@Component
属于Spring API。它将类标记为自动检测为bean,并可选择允许您指定该bean的名称(@Component("foo")
)。如果没有明确的名称规范,bean将获得从其类名称派生的默认名称。
@Named
属于javax.inject
API。它将类标记为自动检测为bean,并要求您指定名称。
Spring支持这两种API。在同一个类中使用两个注释是没有意义的,因为它们提供相同的功能。
另见:
答案 1 :(得分:6)
Spring支持@Named
注释(JSR-330)作为@Component
(Spring)的替代。
一般来说,@Named
的名称很少,因为它没有描述它的作用,所以我宁愿尽可能使用@Component
。
答案 2 :(得分:0)
应该使用两者中的任何一个。 使用@Component和@Named没有任何意义。 添加上面的(Other)注释@Component(“[someComponentID]”)和@Named(“[someNamedID]”)通过在括号中传递ID来为bean分配ID,如果没有隐式赋值的话。