1

在我的项目中,我在集成层中看到了这样的 spring 依赖注入语法:

applicationContext.getBean("beanName");

其中ClasspathXMLApplicationContext 的applicationContext 实例和“ beanName”在spring xml 中定义。如果我想用 Annotation 注入它,我应该使用哪一个?@Inject,@Autowired,@Resource.似乎我可以使用其中任何一种,但我似乎无法决定使用哪一种。这是 SPring 集成层,而不是 MVC 层,但我认为这没有任何区别。

4

3 回答 3

4

@Inject@Autowired做同样的事情,它按类型自动装配。 @Inject是首选,因为它是一个 java 注释并且不会将您耦合到 Spring

@Resource按名称自动装配。当您有许多相同类型的 bean 时,这很有用。您也可以将@Namedwith@Inject用于相同的行为。

于 2013-06-25T16:03:34.853 回答
2

@Inject是 的同义词@Autowired
@Autowired而且提供可选注入 @Autowired(reqired=false) @Inject没有这个选项。

@Inject并且@ResourceJSR-299中进行了标准化,因此如果可能,应该优先使用它。

简而言之,提到的注释匹配要注入的依赖项的顺序:

@Autowired@Inject

  1. 按类型匹配
  2. 限定符限制(@Qualifier注释)
  3. 按名称匹配

@Resource

  1. 按名称匹配
  2. 按类型匹配
  3. 限定符限制(@Qualifier如果按名称找到匹配则忽略)

您可以在此处找到有关这些注释的更多信息:http:
//blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/

于 2013-06-25T16:09:30.830 回答
1

@Inject 和 @Autowired 是相似的。原生的 Spring 注解是 @Autowired,甚至 Spring 也支持 Java 的 @Inject 注解,这也是一样的。

@Resource 是 Java 注解,Spring 也支持该注解。这意味着 JNDI 资源。

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-annotation-config

http://docs.oracle.com/javase/7/docs/api/javax/annotation/Resource.html

http://docs.oracle.com/javaee/6/api/javax/inject/Inject.html

于 2013-06-25T16:09:27.423 回答