使用Spring注释来注入依赖

时间:2013-06-25 15:59:05

标签: spring spring-annotations

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

applicationContext.getBean("beanName");

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

3 个答案:

答案 0 :(得分:4)

@Inject@Autowired执行相同的操作,按类型自动装配。 @Inject是首选,因为它是一个java注释,并不会将您联系到Spring

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

答案 1 :(得分:2)

@Inject@Autowired同义 @Autowired还提供可选注入 @Autowired(reqired=false) @Inject没有此选项。

@Inject@ResourceJSR-299标准化,因此如果可能,应该优先考虑。

简而言之,所提及的注释与依赖注入匹配的顺序为:

  

@Autowired@Inject

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

    @Resource

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

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

答案 2 :(得分: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