2013-02-25 88 views
6

在Spring中有两个单独的注释来按名称执行依赖注入,javax.annotation.Resourcejavax.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

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

谢谢。

+1

所提及的限制仅仅是指Spring将如何使用这些注释,以及Spring如何引入注释对于Spring的具体操作更加健壮。 – 2013-02-25 16:55:43

+0

这些限制似乎并不那么繁重。尽管它们确实存在。如果Spring也采用了额外的CDI注释,似乎很多情况会更简单。 – Saish 2013-02-25 17:32:59

回答

1

@Resource比Spring 2.5更老,并且支持它,而Spring 3.0中已经添加了@Named支持,并且它们都可以用于实现注入名称的相同目的。

当使用Spring时,我比较喜欢使用Spring的关注点是与Spring 2.5的向后兼容性,以及是否可以在类路径上添加/假定是否有javax.inject。

+0

@Inject @Named(“beanName”)在Spring 3.0.7中不起作用,但@Resource(name =“beanName”)做。 – 2014-09-10 08:04:01

+0

类路径中是javax.inject还是javaee-api jar?只要确保它是因为自Spring 3.0.0以来已经添加了对支持\ @Inject和\ @Named的支持。 – 2014-09-15 01:14:45