Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring依赖注入,使用@Named还是@Resource?_Java_Spring_Dependency Injection - Fatal编程技术网

Java Spring依赖注入,使用@Named还是@Resource?

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,

Spring中有两个单独的注释按名称执行依赖项注入,
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开始添加的。