在Spring中有两个单独的注释来按名称执行依赖注入,javax.annotation.Resource
和javax.inject.Named
。该documentation at Spring表示@Resource
应使用注射用名:Spring依赖注入,使用@Named或@Resource?
如果要表达的名字注解驱动的注入,不 主要使用@Autowired,即使在技术上能够参考 一个bean的名字通过@Qualifier值。相反,请使用JSR-250 @资源注释,该资源注释在语义上定义为通过其唯一名称标识特定目标组件,并且声明的类型 与匹配过程无关。
以上是有点混乱,因为Spring仅主张@Resource
代替@Autowired
与@Qualifer
组合。在later in the documentation之前没有提及@Named
。
JSR-250定义了@Resource
,而JSR-330定义了@Inject
和@Named
。我知道他们可以很容易地在Spring中混合搭配。使用哪个JSR?
似乎可移植性与Guice和CDI会很好,因此可以使用JSR-330注释。另一方面,当使用JSR-330注释时,文档中还指出了Spring中几个limitations。
注射按名称注释的最佳实践(如果有的话)是什么?
谢谢。
所提及的限制仅仅是指Spring将如何使用这些注释,以及Spring如何引入注释对于Spring的具体操作更加健壮。 – 2013-02-25 16:55:43
这些限制似乎并不那么繁重。尽管它们确实存在。如果Spring也采用了额外的CDI注释,似乎很多情况会更简单。 – Saish 2013-02-25 17:32:59