Spring IOC中 @Autowired和@Resource注解的区别
Posted java叶新东老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring IOC中 @Autowired和@Resource注解的区别相关的知识,希望对你有一定的参考价值。
@Autowired和@Resource注解的最大区别就是
- @Autowired 默认是以类型type(全类名)装配的,
- @Resource默认是以名称id(byName)装配 的
@Resource
@Resource是java自带的注解,使用方式,在属性上面加上@Resource注解后,spring默认会在ioc容器里面寻找name为testController 的bean,如果找不到则直接报错,我们看到的默认注入方式是这样的
@Resource
private TestController testController;
其实它内部是这样的
@Resource(name="testController")
private TestController testController;
除此之外,@Resource 也可以通过类型的方式自动注入bean ,使用方式
@Resource(type=com.Spring.Boot.controller.TestController.class)
private TestController testController;
画个流程图, 方便大家理解
@Autowired
@Autowired 是由spring实现的注解,必须导入spring相关jar包后方可使用,默认以type类型方式注入,一般我们使用的时候是这样的
@Autowired
private TestController testController;
但其实,在内部,它是这样的,require的默认属性值为 true ;
@Autowired(required = true)
private TestController testController;
- 当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败;
- 当配置为 :@Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错;
也可以通过名称id(byName)的方式进行注入
@Autowired(required = false)
@Qualifier(value ="testController")
private TestController testController;
上图更直观
以上是关于Spring IOC中 @Autowired和@Resource注解的区别的主要内容,如果未能解决你的问题,请参考以下文章
[Spring5]IOC容器_Bean管理注解方式_注入属性@Autowired_@Qualified_@Resource_@Value