浅谈SpringBoot @Autowired的两种注入方式

 更新时间:2021年06月30日 15:45:41   作者:简单随风  
本文主要介绍了两种SpringBoot @Autowired注入方式,具有一定的参考价值,需要的朋友们下面随着小编来一起学习学习吧

Autowired有两种注入方式

  • by type
  • by name

默认使用的是byType的方式向Bean里面注入相应的Bean。例如:

@Autowired
private UserService userService;

这段代码会在初始化的时候,在spring容器中寻找一个类型为UserService的bean实体注入,关联到userService的引入上。
但是如果UserService这个接口存在多个实现类的时候,就会在spring注入的时候报错,例如:

public class UserService1 implements UserService
public class UserService2 implements UserService

此时会报错 org.springframework.beans.factory.BeanCreationException,而原因是注入的时候发现有2个匹配的bean,但是不知道要注入哪一个:expected single matching bean but found 2: userService1,userService2
我们改成以下方式:

@Autowired
private UserService userService1;

@Autowired
private UserService userService2;

@Autowired
@Qualifier(value = "userService2")
private UserService userService3;

@Test
public void test(){
    System.out.println(userService1.getClass().toString());
    System.out.println(userService2.getClass().toString());
    System.out.println(userService3.getClass().toString());
}

运行结果:

class yjc.demo.serviceImpl.UserService1
class yjc.demo.serviceImpl.UserService2
class yjc.demo.serviceImpl.UserService2

运行结果成功,说明了2种处理多个实现类的方法:

1.变量名用userService1,userService2,而不是userService。
通常情况下@Autowired是通过byType的方法注入的,可是在多个实现类的时候,byType的方式不再是唯一,而需要通过byName的方式来注入,而这个name默认就是根据变量名来的。

2.通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。
由此看来,@Autowired注解到底使用byType还是byName,其实是存在一定策略的,也就是有优先级。优先用byType,而后是byName。

到此这篇关于浅谈SpringBoot @Autowired的两种注入方式的文章就介绍到这了,更多相关SpringBoot @Autowired注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java求s=a+aa+aaa+aaaa+aa...a 5个数相加的值

    Java求s=a+aa+aaa+aaaa+aa...a 5个数相加的值

    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
    2017-02-02
  • Mybatis执行流程、缓存原理及相关面试题汇总

    Mybatis执行流程、缓存原理及相关面试题汇总

    最近刚学完MyBatis,趁着大好机会,总结一下它的执行流程,面试也爱问这个,下面这篇文章主要给大家介绍了关于Mybatis执行流程、缓存原理及相关面试题的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java并发编程之JUC并发核心AQS同步队列原理剖析

    Java并发编程之JUC并发核心AQS同步队列原理剖析

    AbstractQueuedSynchronizer 简称 AQS,可能我们几乎不会直接去使用它,但它却是 JUC 的核心基础组件,支撑着 java 锁和同步器的实现,大神 Doug Lea 在设计 JUC 包时希望能够抽象一个基础且通用的组件以支撑上层模块的实现,AQS 应运而生
    2021-09-09
  • 第一次编写Java流布局图形界面

    第一次编写Java流布局图形界面

    这篇文章主要为大家详细介绍了第一次编写Java流布局图形界面的相关代码,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Java静态代理与动态代理案例详解

    Java静态代理与动态代理案例详解

    这篇文章主要介绍了Java静态代理与动态代理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • SpringBoot测试junit遇到的坑及解决

    SpringBoot测试junit遇到的坑及解决

    这篇文章主要介绍了SpringBoot测试junit遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 基于Springboot的高校社团管理系统的设计与实现

    基于Springboot的高校社团管理系统的设计与实现

    本文将基于Springboot+Mybatis开发实现一个高校社团管理系统,系统包含三个角色:管理员、团长、会员。文中采用的技术有Springboot、Mybatis、Jquery、AjAX、JSP等,感兴趣的可以了解一下
    2022-07-07
  • Java中双大括号初始化的理解与使用

    Java中双大括号初始化的理解与使用

    最近重读Java 编程思想,读到有关实例化代码块儿的内容,使我对于使用两个大括号进行初始化有了更深的理解,下面这篇文章主要给大家介绍了关于Java中双大括号初始化的理解与使用的相关资料,需要的朋友可以参考下
    2022-06-06
  • Mybatis plus实现Distinct去重功能

    Mybatis plus实现Distinct去重功能

    这篇文章主要介绍了Mybatis plus实现Distinct去重功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Springboot @Validated和@Valid的区别及使用详解

    Springboot @Validated和@Valid的区别及使用详解

    这篇文章主要介绍了Springboot @Validated和@Valid的区别及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论