@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;
上图更直观