在 Spring 中有两个单独的注解用于按名称执行依赖注入,javax.annotation.Resource
而javax.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 注释时 的一些限制。
注释按名称注入的最佳实践(如果有的话)是什么?
谢谢你。