首页 > 其他分享 >Spring中获取bean的方式

Spring中获取bean的方式

时间:2022-08-21 21:55:19浏览次数:82  
标签:Spring 接口 获取 bean Student 类型 id

1. 获取bean

image-20220821170004102 image-20220821205138294

在上图的测试类中我们是通过id来获取bean的。实际上获取bean的方式有很多种,下面我们就一一说明。

1.1 方式一:根据id获取

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象。
如开头中我们使用的就是这种方式。
bean标签属性:

  • id:设置bean的唯一标识
  • class:设置bean所对应类型的全类名
1.2 方式二:根据类型获取

用的比较多

image-20220821210021960

注意

  • 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个

    当IOC容器中一共配置了两个:

    <bean id="helloworldOne" class="com.atguigu.spring.bean.HelloWorld"></bean>
    <bean id="helloworldTwo" class="com.atguigu.spring.bean.HelloWorld"></bean>
    

    会抛出异常:NoUniqueBeanDefinitionException

  • 若没有任何一个类型匹配的bean,此时会抛出异常:NoSuchBeanDefinitionException

1.3 方式三:根据id和类型
image-20220821211219179

第三种方式是不是有点鸡肋。。

或许是单纯通过id获取需要强制类型转化吧,单纯通过类型当匹配bean有多个时又不行,所以结合起来用。

1.4 扩展
  • 如果组件类实现了接口,根据接口类型可以获取 bean 吗?

    就是用了implements关键字

    可以的,前提是bean唯一

    例子:

    image-20220821213329811

    image-20220821213706235

    这里Student中实现了Person接口,但在配置文件中我们只配置了Student的bean

    image-20220821214327573 image-20220821214348199

    我们还是可以通过接口Person来获取到Student的bean。

    也就是说在IOC容器中配置了一个bean后,我们是可以通过它所继承的父类或所实现的接口来获取。

    但前提是只有一个Student实现了Person接口

  • 如果一个接口有多个实现类,这些实现类都配置了 bean,根据接口类型可以获取 bean 吗?

    不行,因为bean不唯一。上面已经提到了

2. 总结

部分内容来自 B站尚硅谷课程 。老师讲得很好,有兴趣的可以听听。

标签:Spring,接口,获取,bean,Student,类型,id
From: https://www.cnblogs.com/tianaqiang/p/16611118.html

相关文章

  • 蚂蚁金服开源的这份SpringBoot笔记,曾在24小时内GitHub星标48k
    前言Spring的影响力想必就不用小编多说了,今天要跟大家说的是SpringBoot。SpringBoot作为目前Spring技术体系中炙手可热的框架之一,已经是开发者们的必备神器了。在实际......
  • Linux虚拟机Nginx代理vue前端与SpringBoot后端资源
    1.Nginx安装配置详细参见菜鸟教程:https://www.runoob.com/linux/nginx-install-setup.html2.nginx.conf内容usernginx;worker_processes1;#设置值和CPU核心数......
  • VUE+SpringBoot环境准备
    一、nodejs下载地址官网:https://nodejs.org/zh-cn/其它版本:https://nodejs.org/zh-cn/download/releases/源码地址:https://github.com/nodejs二、vscode下载地......
  • SpringBoot项目在不同环境下的配置以及打包方式
    一、概述配置三个配置文件,只需要打包的时候,根据不同环境打包不同的配置文件application.yml是启动服务时,Spring会自动加载的配置文件application-de......
  • idea+SpringBoot使用过程中的问题集合
    1.跨域访问外部接口?使用Nginx代理(详细参见:https://www.cnblogs.com/ZhaoHS/p/16594619.html);合并部署,统一从后端访问第三方接口(合并部署详见:https://www.cnblo......
  • Jenkins+Docker+SpringCloud微服务持续集成(下)
    Jenkins+Docker+SpringCloud部署方案优化上面部署方案存在的问题:1)一次只能选择一个微服务部署2)只有一台生产者部署服务器3)每个微服务只有一个实例,容错率低优化方案:......
  • Spring Boot项目的单元测试
    引入依赖要进行单元测试,首先需要在项目中引入spring-boot-starter-test组件,配置在项目的pom.xml文件,如下:<dependency><groupId>org.springframework.boot</grou......
  • spring5 事务 纯注解开发
    1.TxConfigpackagecom.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.context.annotation.Bean;importorg.springframework.......
  • Spring入门案例-基于XML管理bean
    1.入门案例--hellospring创建MavenModule在pom.xml中引入依赖<dependencies><!--基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......