7

在 Spring 中有两个单独的注解用于按名称执行依赖注入,javax.annotation.Resourcejavax.inject.Named. Spring的文档表明@Resource应该按名称用于注入:

如果您打算通过名称来表达注解驱动的注入,请不要主要使用@Autowired,即使在技术上能够通过@Qualifier 值引用bean 名称。相反,使用 JSR-250 @Resource 注释,它在语义上定义为通过其唯一名称标识特定目标组件,声明的类型与匹配过程无关。

上面有点混乱,因为 Spring 只是提倡@Resource而不是@Autowired@Qualifer. @Named直到后面的文档中才提到。

JSR-250 定义@Resource,而 JSR-330 定义@Inject@Named。我知道它们可以很容易地在 Spring 中混搭。使用哪个 JSR?

似乎 Guice 和 CDI 的可移植性会很好,因此使用 JSR-330 注释。另一方面,该文档还指出了Spring 在使用 JSR-330 注释时 的一些限制。

注释按名称注入的最佳实践(如果有的话)是什么?

谢谢你。

4

1 回答 1

1

@Resource 较旧,从 Spring 2.5 开始支持,而在 Spring 3.0 中添加了 @Named 支持,它们都可以用于实现按名称注入的相同目的。

使用 Spring 时,我更喜欢一个而不是另一个的担心是与 Spring 2.5 的向后兼容性以及 javax.inject 是否可以添加/假定为类路径。

于 2014-01-30T04:52:13.727 回答