Java Spring依赖注入,使用@Named还是@Resource?
Spring中有两个单独的注释按名称执行依赖项注入,Java Spring依赖注入,使用@Named还是@Resource?,java,spring,dependency-injection,Java,Spring,Dependency Injection,Spring中有两个单独的注释按名称执行依赖项注入,javax.annotation.Resource和javax.inject.Named。指示应按名称将@资源用于注入: 如果您打算用名称表示注释驱动的注入,请不要 主要使用@Autowired,即使在技术上能够引用 通过@Qualifier值创建一个bean名称。相反,使用JSR-250 @资源注释,它在语义上定义为标识 特定目标组件的唯一名称,以及声明的类型 与匹配过程无关 上面的内容有点令人困惑,因为Spring只提倡@Resource,
javax.annotation.Resource
和javax.inject.Named
。指示应按名称将@资源
用于注入:
如果您打算用名称表示注释驱动的注入,请不要
主要使用@Autowired,即使在技术上能够引用
通过@Qualifier值创建一个bean名称。相反,使用JSR-250
@资源注释,它在语义上定义为标识
特定目标组件的唯一名称,以及声明的类型
与匹配过程无关
上面的内容有点令人困惑,因为Spring只提倡@Resource
,而不是@Autowired
与@qualifier
相结合。在之前,没有提到命名为的@
JSR-250定义了@Resource
,而JSR-330定义了@Inject
和@Named
。我知道它们可以很容易地在春季混合搭配。使用哪个JSR
使用Guice和CDI的可移植性似乎很好,因此可以使用JSR-330注释。另一方面,在使用JSR-330注释时,文档还指出了Spring中的一些问题
按名称进行注释注入的最佳实践是什么(如果有)
谢谢。@Resource较旧,从Spring 2.5开始受支持,而Spring 3.0中添加了@Named支持,这两种支持都可以用于实现按名称注入的相同目的
在使用Spring时,我更倾向于选择其中一个,这是因为它与Spring 2.5的向后兼容性,以及javax.inject是否可以添加/假定在类路径上。提到的限制只涉及Spring如何使用这些注释,Spring引入的注释对于专门使用Spring来说更加健壮。限制似乎并不那么繁重。尽管它们确实存在。如果Spring还采用了额外的CDI注释,那么这似乎会更简单。@Inject@Named(“beanName”)在Spring 3.0.7中不适用于我,但@Resource(name=“beanName”)适用。javax.Inject或javaee api jar在类路径上吗?只需确保这是因为对\@Inject和\@Named的支持是从Spring3.0.0开始添加的。