14.基于XML管理Bean

news/2025/3/19 5:39:47/

基于XML管理Bean

配置Springframework

引入依赖

	<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.1</version></dependency>

创建Spring配置文件

resources目录下新建applicationContext.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"></beans>

测试Spring

创建Hello.java

package com.atguigu.spring;public class Hello {public void sayHello(){System.out.println("Hello,Spring");}
}

applicationContext.xml添加语句

	<!--配置Hello所对应的bean,即将Hello的对象交给Spring的IOC容器管理通过bean标签配置IOC容器所管理的bean属性:id:设置bean的唯一标识class:设置bean所对应类型的全类名--><bean id="Hello" class="com.atguigu.spring.Hello"></bean>

新建测试类SpringTest.java

    @Testpublic void testHello(){//获取对应配置文件中的IOC容器ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");//获取IOC容器中的BeanHello hello = (Hello) ioc.getBean("Hello");hello.sayHello();}

实现过程

注意事项

Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。如果在需要无参构造器时,没有无参构造器,则会抛出下面的异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘Hello’ defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.atguigu.spring.Hello]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.atguigu.spring.Hello.()

获取Bean的三种方式

根据id获取

由于 id 属性指定了 bean 的唯一标识,所以根据 bean 标签的 id 属性可以精确获取到一个组件对象,但是根据 id 属性获取到的对象需要进行强转才能使用

        Hello hello = (Hello) ioc.getBean("Hello");

根据类型进行获取

由于大多数情况下唯一的 id 对应唯一的类型,所以可以直接根据类型查找,且方法会自动匹配类型,不需要进行强转

        Hello hello1 = ioc.getBean(Hello.class);

当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个,当IOC容器中一共配置了两个时,IOC容器无法确定唯一的一个时,会报错

    <bean id="Hello" class="com.atguigu.spring.Hello"></bean><bean id="Hello1" class="com.atguigu.spring.Hello"></bean>
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring.Hello' available: expected single matching bean but found 2: Hello,Hello1

当一个都没有配置到IOC容器时,会报错

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring.Hello' available

根据id和类型进行获取

        Hello hello2 = ioc.getBean("Hello",Hello.class);

获取实现接口的Bean

创建接口HelloInterface.javaHello.java实现

public interface HelloInterface {void sayHello();
}

则可以通过多态来获取实现接口的bean–>向上转型

        //ioc.getBean(Hello.class)的写法相当于指定"id"为"Hello"("Hello"需先挂载在<bean>标签)HelloInterface hello = ioc.getBean(HelloInterface.class);//查找实现HelloInterface的类

如果一个接口有多个实现类,这些实现类都配置了 bean,则需要通过getBean方法内的名称或者根据id和类型获取唯一的bean

原理

根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:『对象 instanceof 指定的类型』的返回结果,只要返回的是true就可以认定为和类型匹配,能够获取到


http://www.ppmy.cn/news/445174.html

相关文章

Geforce Game Ready驱动程序无法继续安装

Geforce Game Ready驱动程序无法继续安装 最近显卡驱动提示更新&#xff0c;而在Geforce Experience中下载驱动程序后提示遇到了一个问题&#xff0c;无法继续安装&#xff0c;点击重试也依然无法解决&#xff0c; 解决方法&#xff1a; 安装最新版的Geforce Experience后重新…

rust 使用第三方库构建mini命令行工具

这是上一篇 rust 学习 - 构建 mini 命令行工具的续作&#xff0c;扩展增加一些 crate 库。这些基础库在以后的编程工作中会常用到&#xff0c;他们作为基架存在于项目中&#xff0c;解决项目中的某个问题。 项目示例还是以上一篇的工程为基础做调整修改ifun-grep 仓库地址 怎…

Python3 数字(Number)与字符串 | 菜鸟教程(五)

目录 一、Python3 数字(Number) &#xff08;一&#xff09;Python 数字数据类型用于存储数值。 1、以下实例在变量赋值时 Number 对象将被创建&#xff1a; 2、您也可以使用del语句删除一些数字对象的引用。 3、您可以通过使用del语句删除单个或多个对象的引用 &#xff08;…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 阿里巴巴找黄金宝箱(III)

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客阿里巴巴找黄金宝箱(III) 题目描述 贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的箱子&#xff0c;每个箱子上面贴有一个数字。 阿里巴巴念出一个咒…

笔记本自动打开计算机,笔记本电脑自动开机是什么原因

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 笔记本电脑自动开机的原因是&#xff1a; 1、检查是否在BIOS设置中将定时开机功能设为了“Enabled”&#xff0c;这样电脑会在设定的时间自动开机。 2、检查是否在BIOS设置项中开启…

打开计算机电源启动计算机属于什么情况,电脑接通电源后自动开机的原因是什么...

如果电脑出现接通电源就自动开机的情况&#xff0c;有两种可能性&#xff0c;一是设定了来电开机功能;二是电源本身问题。 1、来电开机功能和电源管理有关&#xff0c;可能是在BIOS设置项中开启了来电自动开机的功能&#xff0c;这时一插上交流电源&#xff0c;电脑便会自动启动…

计算机主机报警是什么原因,电脑主机一直滴滴响开不了机 解决电脑主机一直滴滴响开不了机的方法...

一般出现这种情况都是电脑的内存条出现了故障&#xff0c;这时可以把电脑主机打开&#xff0c;把内存条取消&#xff0c;擦拭后插入即可&#xff0c;如果内存条中灰尘积累太多&#xff0c;也会导致电脑出现故障&#xff0c;这时可以使用橡皮擦把内存条两遍的金手指擦干净即可。…

断电后,台式计算机无法启动,突然停电 之后电脑主机就不通电?也不能开机?为什么?...

第一&#xff0c;就是电脑的电源出现问题&#xff0c;比如开关三极管&#xff0c;保险丝&#xff0c;整流二极管&#xff0c;滤波大电容&#xff0c;等等出现问题&#xff0c;都无法导过电源&#xff0c;就无法输出电压和电流&#xff0c;主机没有电压和电流自然就开不了机&…