当前位置: 首页 > news >正文

2_Spring【IOC容器中获取组件Bean】

Spring中IOC容器中获取组件Bean

实体类

//接口
public interface TestDemo {public void doSomething();
}
// 实现类
public class HappyComponent implements TestDemo {public void doSomething() {System.out.println("HappyComponent is doing something...");}
}

创建Bean配置文件

spring-03.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    组件信息做ioc配置 ->applicationContext读取->实例化对象--><bean id="happyComponent" class="com.atguigu.ioc_03.HappyComponent"/>
</beans>

IOC容器中获取组件Bean

    /*** 在IOC容器中获取组件Bean*/@Testpublic void getBeanFormIocTest() {
//        1.创建IOC容器ClassPathXmlApplicationContext applicationContext1 = new ClassPathXmlApplicationContext();applicationContext1.setConfigLocations("spring-03.xml"); // 外部配置文件设置applicationContext1.refresh(); // 刷新容器 IOC、DI的动作
//        2.读取IOC容器的组件
//        方式一:直接根据BeanId获取 获取的是一个Object对象 需要强制转换[不推荐]HappyComponent happyComponent = (HappyComponent)applicationContext1.getBean("happyComponent");
//        方式二:根据BeanId和类型获取 获取的是一个指定类型的对象[推荐]HappyComponent happyComponent1 = applicationContext1.getBean("happyComponent", HappyComponent.class);
//        方式三:根据类型获取 获取的是一个指定类型的对象
//        TODO 根据bean的类型获取,同一个类型,在ioc容器中只能有一个bean!!!(如果ioc容器存在多个同类型的bean,会出现NoUniqueBeanDefinitionException[不唯一]异常)HappyComponent happyComponent2 = applicationContext1.getBean(HappyComponent.class);
//        3.使用组件happyComponent.doSomething();happyComponent1.doSomething();happyComponent2.doSomething();System.out.println(happyComponent == happyComponent1); // trueSystem.out.println(happyComponent == happyComponent2); // true
//        4.IOC的bean配置一定是实现类,但是可以根据接口类型获取值
//        getBean(,类型) 其中的类型判断采用  instanceof ioc容器的类型 == true  (接口与实现类之间是true的关系)
//        在实际业界使用这种方式,可以将部分逻辑抽离出来,封装工具,只留接口作为对外暴露的api,继承自该接口的直接实现类可以直接使用TestDemo testDemo = applicationContext1.getBean("happyComponent", TestDemo.class);TestDemo testDemo1 = applicationContext1.getBean(TestDemo.class); // 这样更简洁但是要注意 bean中同一类型只能有一个!!!testDemo.doSomething(); // HappyComponent is doing something...}
http://www.dtcms.com/a/198278.html

相关文章:

  • 中级统计师-统计学基础知识-第四章 假设检验
  • 企业内部风险管理:人性化与技术并重
  • 浅谈迷宫类问题中的BFS和DFS
  • ctf 基础
  • [ctfshow web入门] web119
  • 软件设计师CISC与RISC考点分析——求三连
  • 算法加训之最短路 上(dijkstra算法)
  • <前端小白> 前端网页知识点总结
  • 10.13 LangChain工具调用实战:@tool装饰器+小样本提示,日处理10w+调用秘籍
  • 3Dmax中用RayFire实现破碎动画效果
  • 机器学习(13)——LGBM(2)
  • 用Colab启动Streamlit应用
  • 机器学习 Day18 Support Vector Machine ——最优美的机器学习算法
  • 板凳-------Mysql cookbook学习 (三)
  • c/c++的opencv直方图初识
  • ADB基本操作和命令
  • 深入理解 OpenCV 的 DNN 模块:从基础到实践
  • 顺 序 表:数 据 存 储 的 “ 有 序 阵 地 ”
  • 计算机网络概要
  • 牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
  • 【从基础到模型网络】深度学习-语义分割-ROI
  • OceanBase数据库-租户
  • 小米汽车:新能源赛道的破局者与变革者
  • UE5无法编译问题解决
  • 抖音视频下载工具 v1.1 自用分享
  • 【Python 算法零基础 4.排序 ① 选择排序】
  • 为何选择Python:全面解析其优势与发展前景
  • Linux下载国外软件镜像的加速方法(以下载Python-3.8.0.tgz为例)
  • Java可变参数与Collections工具类详解
  • 系统架构设计师考前冲刺笔记-第1章-系统工程与信息系统基础