在Spring中,@Autowired和@Resource都是用来实现Bean的自动注入功能。
这两个注解虽然都能实现自动注入,但它们在使用方式和注入顺序上有一些区别。
首先,@Autowired和@Resource所属的包不同。@Autowired是Spring的注解,而@Resource是JSR-250的注解。
在使用IDEA时,有时会在@Autowired注解上面提示“Field injection is not recommended”(字段注入不被推荐)的警告。虽然并不属于报错,但是确实是警告的存在。这是因为@Autowired是Spring提供的特定IoC框架的注解,导致了应用与框架的强绑定,一旦换用其他的IoC框架,是不能够支持注入的。而@Resource是Java自己提供的,与框架无关。
其次,@Autowired能够用在构造函数、setter方法、属性上;而@Resource只能用在setter方法、属性上。
另外,两者在依赖注入的支持和默认类型上也有所不同。@Autowired默认按类型注入,如果根据类型找不到合适的bean,则会抛出异常;而@Resource默认按名称注入,如果按名称注入找不到合适的bean,则再按类型注入。
总的来说,在Spring项目中,这两个注解一般可以互相替换,主要是要了解它们的注入顺序。
下面是@Autowired和@Resource自动注入顺序的流程图: