在我的项目中,我在集成层中看到了这样的spring依赖注入语法:
applicationContext.getBean("beanName");
其中classpathXMLApplicationContext的applicationContext实例和“beanName
”在spring xml中定义。
如果我想用Annotation注入它,我应该使用哪一个? @Inject,@Autowired,@Resource.
似乎我可以使用其中任何一个,我似乎无法决定哪一个。
这是SPring集成层,而不是MVC层,但我认为这没有任何区别。
答案 0 :(得分:4)
@Inject
和@Autowired
执行相同的操作,按类型自动装配。 @Inject
是首选,因为它是一个java注释,并不会将您联系到Spring
@Resource
按名称自动装配。当您有许多相同类型的bean时,这很有用。您也可以将@Named
与@Inject
一起用于相同的行为。
答案 1 :(得分:2)
@Inject
与@Autowired
同义
@Autowired
还提供可选注入 @Autowired(reqired=false)
@Inject
没有此选项。
@Inject
和@Resource
在JSR-299标准化,因此如果可能,应该优先考虑。
简而言之,所提及的注释与依赖注入匹配的顺序为:
@Autowired
和@Inject
- 按类型匹配
- 按限定符限制(
@Qualifier
注释)- 按名称匹配
醇>
@Resource
- 按名称匹配
- 按类型匹配
- 按限定符限制(
醇>@Qualifier
,如果按名称找到匹配则忽略)
您可以在此处找到有关这些注释的更多信息:
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://docs.oracle.com/javase/7/docs/api/javax/annotation/Resource.html
http://docs.oracle.com/javaee/6/api/javax/inject/Inject.html