@Autowired和@Resource都是用来实现Bean的自动注入功能。
IDEA 有时候会在 @Autowired 注解上面提示Field injection is not recommended (字段注入是不被推荐的)这个警告,虽然并不属于报错,但是确实是警告的存在。
就是因为@Autowired是Spring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。
而 @Resource是 Java 自己提供的,它是Java标准,所以它是与框架无关的。
依赖注入功能,是先在容器中查找需要的对象,再将对象注入到当前类中。
查找的方式有两种:
@Autowired和@Resource都用到了byType和byName两种方式,但二者的使用顺序却不同。
@Autowired默认按类型注入,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。
如果根据类型找不到合适的bean,则会抛出异常。
如果根据类型找到了多个bean,则再根据bean的名称进行匹配,如果匹配成功,则注入成功;如果匹配失败,则抛出异常。
@Autowired自动注入顺序流程图:
@Resource默认按名称注入,如果按名称注入找不到合适的bean,则再按类型注入。
@Resource自动注入顺序流程图:
也就是:
在Spring项目中,这两个注解一般可以互相替换。
主要是要了解它们的注入顺序。