Spring IOC中 @Autowired和@Resource注解的区别

发布时间:2022-03-01 11:36:06 作者:yexindonglai@163.com 阅读(528)

 

@Autowired和@Resource注解的最大区别就是

  • @Autowired 默认是以类型type(全类名)装配的,
  • @Resource默认是以名称id(byName)装配 的

@Resource

    @Resource是java自带的注解,使用方式,在属性上面加上@Resource注解后,spring默认会在ioc容器里面寻找name为testController 的bean,如果找不到则直接报错,我们看到的默认注入方式是这样的

  1. @Resource
  2. private TestController testController;

其实它内部是这样的

  1. @Resource(name="testController")
  2. private TestController testController;

 

除此之外,@Resource 也可以通过类型的方式自动注入bean ,使用方式

  1. @Resource(type=com.Spring.Boot.controller.TestController.class)
  2. private TestController testController;

画个流程图, 方便大家理解

 

@Autowired

@Autowired 是由spring实现的注解,必须导入spring相关jar包后方可使用,默认以type类型方式注入,一般我们使用的时候是这样的

  1. @Autowired
  2. private TestController testController;

但其实,在内部,它是这样的,require的默认属性值为 true ;

  1. @Autowired(required = true)
  2. private TestController testController;
  • 当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败;
  • 当配置为 :@Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错;

也可以通过名称id(byName)的方式进行注入

  1. @Autowired(required = false)
  2. @Qualifier(value ="testController")
  3. private TestController testController;

上图更直观

关键字Spring