在 Spring 应用程序中充当 bean 的类是否同时需要@Component
两者@Named
?
如果两者都这样使用有什么意义?
我尝试在网上搜索并查看这些注释的标准文档,发现它们有点混乱。
最后,如果@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。在同一个类中使用两个注解是没有意义的,因为它们提供了相同的功能。
也可以看看:
Spring 支持@Named
注解 (JSR-330) 作为@Component
(Spring) 的替代方案。
一般来说,@Named
名字不好,因为没有描述它的作用,所以我宁愿尽可能使用@Component
。
两者中的任何一个都应该使用。同时使用@Component 和@Named 没有任何意义。添加到上面(其他的)注释 @Component("[someComponentID]") 和 @Named("[someNamedID]") 通过在括号中传递 ID 为 bean 分配一个 ID,如果没有隐式分配一个。