Ioc容器创建 和 读取组件的测试类

A接口

package com.atguigu.Ioc_03;public interface A {void dowork();
}

HappyComponent.java

package com.atguigu.Ioc_03;public class HappyComponent implements A {// 默认包含无参的构造方法@Overridepublic void dowork() {System.out.println("我是:HappyComponent.dowork。");}
}

resouces文件夹下的 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"><bean id="happyComponent" class="com.atguigu.Ioc_03.HappyComponent"></bean></beans>

这个是测试类:SpringIocTest.java

package com.atguigu.test;import com.atguigu.Ioc_03.A;
import com.atguigu.Ioc_03.HappyComponent;import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;Ioc容器创建,和,读取组件的测试类
public class SpringIocTest {讲解,如何创建Ioc容器,并读取配置文件信息,如下,创建容器:选择合适的容器即可*接口BeanFactoryApplicationContext*实现类a. ClassPathXmlApplicationContext:通过读取类路径下的XML格式的配置文件,创建IOC容器对象b. FileSystemXmlApplicationContext:通过文件系统路径,读取XML格式的配置文件,创建IOC容器对象c. AnnotationConfigApplicationContext:通过读取Java配置类,创建IOC容器对象d. WebApplicationContext:专门为Web应用准备,基于Web环境创建IOC容器对象,并将对象引入存入ServletContext域中public void createIoc(){方式1:直接创建容器,并指定配置文件即可ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-03.xml");方式2:先创建Ioc容器对象,再指定配置文件,再刷新(这种方式,是源码的配置过程)ClassPathXmlApplicationContext applicationContext1 = new ClassPathXmlApplicationContext();applicationContext1.setConfigLocations("spring-03.xml"); // 外部配置文件的设置applicationContext1.refresh(); // 调用Ioc容器和DI的流程}讲解,如何在Ioc容器中获取组件Bean@Testpublic void getBeanFromIoc(){步骤1、先创建Ioc容器对象ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext();applicationContext.setConfigLocations("spring-03.xml");applicationContext.refresh();步骤2、读取Ioc容器组件,有如下3个方案,方案1:直接根据BeanId获取即可,返回值类型是Object,需要强转(不推荐这种方式)HappyComponent happyComponent =  (HappyComponent) applicationContext.getBean("happyComponent");方案2:根据BeanId,同时指定Bean的类型ClassHappyComponent happyComponent1 = applicationContext.getBean("happyComponent", HappyComponent.class);方案3:直接根据类型获取注意1:如果Ioc容器,存在多个同类型的bean(id不同,class相同),此时会报NoUniqueBeanDefinitionException错误注意2Ioc的配置一定是实现类,但是可以根据接口类型获取值HappyComponent happyComponent2 = applicationContext.getBean(HappyComponent.class);A happyComponent3 = applicationContext.getBean(A.class);happyComponent3.dowork(); // 我是:HappyComponent.dowork。System.out.println("------------------------");happyComponent.dowork(); // 我是:HappyComponent.dowork。System.out.println(happyComponent == happyComponent1); // trueSystem.out.println(happyComponent1 == happyComponent2); // true}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平台介绍-搭建赛事运营平台(3)

上文介绍了品牌隔离的基本原理&#xff0c;就是通过不同的前端和微服务来实现。但是确实很多功能是类似的&#xff0c;所以从编程角度还是有些管理手段的。 前端部分&#xff1a;前端部分没有什么特别手段&#xff0c;就是两个独立的项目工程&#xff0c;分别维护。相同的部分复…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一&#xff0c; linux 下的网络功能非常强大&#xff0c;嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动&#xff0c;本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…

LeetCode_Java_字符串相加(题目+思路+代码)

415.字符串相加 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 思路&#xff1a; 1…

如何降低 BlueNRG-LPS 的开机峰值电流

1. 前言 BlueNRG 系列存在开机瞬间会出现很大的峰值电流的现象&#xff0c;预计有 20ma 左右。针对此现象&#xff0c;经常有客户询问该峰值电流会不会导致设备工作异常&#xff1f;会不会导致电池使用寿命缩短&#xff08;考虑到一般纽扣电池能承受的峰值电流大概在 15ma 左右…

深度剖析MySQL锁:解开数据库并发控制的神秘面纱

MySQL 锁是 MySQL 数据库管理系统中为了实现并发控制和数据一致性的机制。在多用户并发访问数据库时&#xff0c;锁可以确保多个事务在对同一数据进行操作时不会相互干扰&#xff0c;以防止数据不一致的现象发生。 一、锁分类 MySQL支持多种类型的锁&#xff0c;主要包括…

NGINX安装Stream模块

一.前言 Stream模块是Nginx的一个核心模块&#xff0c;它提供了一种处理TCP和UDP流量的方式。它可以将传入的TCP或UDP流量代理到后端服务器&#xff0c;实现负载均衡和反向代理的功能。它可以根据自定义的规则将流量转发到不同的后端服务器&#xff0c;实现高可用性和性能优化…

定时器的原理和应用

#include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char count0,num0; void inittimer() {TMOD0x01;//0000 0001TH0(65536-50000)/256; //定时50ms50000us 2562^8 初值向右边移动8位TL0(65536-50000)%256;ET01;//开启定…

让Unity的协程变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…

多源统一视频融合可视指挥调度平台VMS/smarteye系统概述

系统功能 1. 集成了视频监控典型的常用功能&#xff0c;包括录像&#xff08;本地录像、云端录像&#xff08;录像计划、下载计划-无线导出&#xff09;、远程检索回放&#xff09;、实时预览&#xff08;PTZ云台操控、轮播、多屏操控等&#xff09;、地图-轨迹回放、语音对讲…

windows 下用使用api OCI_ConnectionCreate连接oracle报错 TNS:无法解析指定的连接标识符

背景&#xff0c;两台服务器系统一样&#xff0c;oracle版本一样&#xff0c;其中一台服务器在运行程序的时候报错 TNS:无法解析指定的连接标识符 但是PL/SQL可以正常连接&#xff0c;怀疑是oracle配置文件的原因 tnsnames.ora配置文件大概作用&#xff1a;是Oracle客户端的网…

实时数仓之实时数仓架构(Hudi)

目前比较流行的实时数仓架构有两类&#xff0c;其中一类是以FlinkDoris为核心的实时数仓架构方案&#xff1b;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对FlinkHudi湖仓一体架构进行介绍&#xff0c;这套架构的特点是可以基于一套数据完全实现Lambda架构。实时数…

springboot整合nacos(配置中心)

使用com.alibaba.boot配置nacos,一定要在bootstrap.yml内配置nacos的相关配置,而不是application.yml sprinboot整合nacos官网,例如pom的依赖是(注意:需要用上nacos的账号密码必须需要nacos-config-spring-boot-starter版本是0.2.6以上,使用nacos-config-spring-boot-st…

基于 StarRocks 的风控实时特征探索和实践

背景 金融风控特征是在金融领域中用于评估和管理风险的关键指标。它们帮助金融机构识别潜在风险&#xff0c;降低损失&#xff0c;并采取措施规避风险。例如&#xff0c;用户最后一次授信提交时间就是一个重要的金融风控特征。 金融风控实时特征场景是一个典型的大数据实时业务…

【人工智能Ⅱ】实验4:Unet眼底血管图像分割

实验4&#xff1a;Unet眼底血管图像分割 一&#xff1a;实验目的与要求 1&#xff1a;掌握图像分割的含义。 2&#xff1a;掌握利用Unet建立训练模型。 3&#xff1a;掌握使用Unet进行眼底血管图像数据集的分割。 二&#xff1a;实验内容 1&#xff1a;用Unet网络完成眼底血…

基于SpringBoot和Vue的在线视频教育平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的在线视频教育平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

STM32时钟简介

1、复位&#xff1a;使时钟恢复原始状态 就是将寄存器状态恢复到复位值 STM32E10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。 复位分类&#xff1a; 1.1系统复位 除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统 复位将复位…

Redis中的LRU算法分析

LRU算法 概述 Redis作为缓存使用时&#xff0c;一些场景下要考虑内容的空间消耗问题。Redis会删除过期键以释放空间&#xff0c;过期键的删除策略 有两种: 1.惰性删除:每次从键空间中获取键时&#xff0c;都检查取得的键是否过期&#xff0c;如果过期的话&#xff0c;就删除…

C++ primer 第十六章

模板是C中泛型编程的基础&#xff0c;一个模板就是一个创建类或函数的蓝图。 1.定义模板 模板适用于唯一的差异是参数的类型&#xff0c;函数体完全一致的情况。 1.1、函数模板 我们可以定义一个通用的函数模板用来生成针对特定类型的函数版本。 模板定义以关键字template…

windows下调用硬件编解码加速的方法(ffmpeg)【个人电脑已实测】

根据查阅了互联网资料&#xff0c;相关文章等 知乎--【FFmpeg实战】FFMPEG硬件编解码器使用 百度文库&#xff1a;ffmpeg硬件解码参数https://wenku.baidu.com/view/58977f497c192279168884868762caaedc33ba4d.html?_wkts_1711613729357&bdQueryffmpeg%E5%A6%82%E4%BD%9…

【Java面试题】Redis上篇(基础、持久化、底层数据结构)

文章目录 基础1.什么是Redis?2.Redis可以用来干什么&#xff1f;3.Redis的五种基本数据结构&#xff1f;4.Redis为什么这么快&#xff1f;5.什么是I/O多路复用&#xff1f;6.Redis6.0为什么使用了多线程&#xff1f; 持久化7.Redis的持久化方式&#xff1f;区别&#xff1f;8.…