同一豆类的@Component和@Named

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

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

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

最后,如果注释未指定 Bean 的任何名称,则应用程序将使用哪个名称?@Named


答案 1

@Component并且是基本上执行相同操作的注释,但来自不同的 API。@Named

@Component属于Spring API。它将类标记为自动检测为 Bean,并选择性地允许您为该 Bean 指定名称 ()。如果没有显式名称规范,检测到的 Bean 将获得从其类的名称派生的缺省名称。@Component("foo")

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

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

另请参阅:


答案 2

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

一般来说,名称很差,因为没有描述它的作用,所以我宁愿尽可能地使用。@Named@Component


推荐