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

时间:2012-04-17 10:32:22

标签: java spring dependency-injection annotations

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

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

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

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

3 个答案:

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