39

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

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

我尝试在网上搜索并查看这些注释的标准文档,发现它们有点混乱。

最后,如果@Named注解没有为 bean 指定任何名称,应用程序将采用哪个名称?

4

3 回答 3

70

@Component并且@Named是基本上做同样事情的注释,但来自不同的 API。

@Component属于 Spring API。它将类标记为自动检测为 bean,并可选择允许您为该 bean 指定名称 ( @Component("foo"))。如果没有明确的名称规范,检测到的 bean 将获得从其类名称派生的默认名称。

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

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

也可以看看:

于 2012-04-17T10:52:22.423 回答
12

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

一般来说,@Named名字不好,因为没有描述它的作用,所以我宁愿尽可能使用@Component

于 2016-11-28T14:24:54.940 回答
0

两者中的任何一个都应该使用。同时使用@Component 和@Named 没有任何意义。添加到上面(其他的)注释 @Component("[someComponentID]") 和 @Named("[someNamedID]") 通过在括号中传递 ID 为 bean 分配一个 ID,如果没有隐式分配一个。

于 2018-01-31T12:00:31.543 回答