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注解的区别的主要内容,如果未能解决你的问题,请参考以下文章

Spring---ioc自动装配和使用注解

spring IoC

[Spring5]IOC容器_Bean管理注解方式_注入属性@Autowired_@Qualified_@Resource_@Value

Spring中Bean获取IOC容器服务的方法

Spring复杂的IOC容器之短小的注解篇

spring ioc