14.基于XML管理Bean

news2024/12/24 11:44:34

基于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

    @Test
    public void testHello(){
        //获取对应配置文件中的IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的Bean
        Hello 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.coloradmin.cn/o/658340.html

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

相关文章

(十)异步-使用异步(3)

一、GUI 程序中的异步操作 1、在 GUI 程序中使用异步操作 在 GUI程序中&#xff0c; 首先理解关于 UI 显示变化的概念。 消息&#xff1a; UI 上的行为&#xff0c;如点击按钮、展示标签、移动窗体等。消息队列&#xff1a; 把要触发的所有消息&#xff0c;都按照相关的顺序…

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

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

【MySQL】索引的数据结构

为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构。进行数据查找时&#xff0c;首先查看查询条件是否命中某条索引&#xff0c;符合则可以通过索引查找相关数据&#xff0c;如果不符合则要全表扫描&#xff0c;即需要一条一条地查找记录&#xff0c;直到找到…

「网络编程」第二讲:网络编程socket套接字(二)_ 简单UDP网络通信程序的实现

「前言」文章是关于网络编程的socket套接字方面的&#xff0c;上一篇是网络编程socket套接字&#xff08;一&#xff09;&#xff0c;下面开始讲解&#xff01; 「归属专栏」网络编程 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 我认…

chatgpt赋能python:Python遍历文章的SEO指南

Python遍历文章的SEO指南 Python是一种高度灵活的编程语言&#xff0c;因其易于学习和使用而为许多程序员、数据科学家和SEO专业人士所青睐。在这篇文章中&#xff0c;我们将探讨Python如何遍历文章和对SEO优化的最佳实践。 什么是Python遍历文章&#xff1f; 遍历文章是指采…

【论文阅读】Segment Anything(SAM)——可分割一切的CV大模型

【前言】随着ChatGPT席卷自然语言处理&#xff0c;Facebook凭借着Segment Anything在CV圈也算扳回一城。迄今为止&#xff0c;github的star已经超过3万&#xff0c;火的可谓一塌糊涂。作为AI菜鸟&#xff0c;可不得自己爬到巨人肩膀上瞅一瞅~ 论文地址&#xff1a;https://arxi…

NDK编译C++源码生成Android平台so文件(opencv_android)

1.准备CPP文件 编写CMakeLists.txt 编写 mk文件 android-8 is unsupported. Using minimum supported version android-16 APP_PLATFORM android-16 is higher than android:minSdkVersion 1 in ./AndroidManifest.xml 修改Application.mk中的APP_PLATFORM为 android-21 builg…

59、基于51单片机多机 NRF24L01 无线温湿度 DHT11报警系统设计(程序+原理图+PCB源文件+参考论文+开题报告+任务书+元器件清单等)

摘 要 温湿度在工农业生产中占有很重要的地位&#xff0c;是工农业生产的重要组成数据。温湿度过高会造成粮食发霉长芽&#xff0c;还会引起大棚蔬菜一系列的病害。因此对其适时准确的测量就显得尤为重要。而一般的测量过程较为复杂繁琐&#xff0c;误差还大。比如现在所使…

MySQL-SQL存储过程/触发器详解(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

Python 循环与判断(详解)

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 在Python中&#xff0c;循环语句有两个&#xff0c;一个是fo…

Redis缓存穿透-击穿-雪崩详细分析加解决办法

Redis 缓存穿透 问题描述-如图 缓存穿透的原因 key 对应的数据在数据源并不存在&#xff0c;每次针对此key 的请求从缓存获取不到&#xff0c;请求都会压到数据源, 可能压垮数据源比如: 用一个不存在的用户id 获取用户信息&#xff0c;不论缓存还是数据库都没有&#xff0c;…

Spring Boot 集成 Redisson分布式锁(拿来即用版)

Redisson 是一种基于 Redis 的 Java 驻留集群的分布式对象和服务库&#xff0c;可以为我们提供丰富的分布式锁和线程安全集合的实现。在 Spring Boot 应用程序中使用 Redisson 可以方便地实现分布式应用程序的某些方面&#xff0c;例如分布式锁、分布式集合、分布式事件发布和订…

JSON5的作用、安装及使用

JSON5是对JSON的扩展&#xff0c;让人可以更容易手工编写和维护&#xff0c;用来减少一些JSON的限制&#xff0c;诸如json语法不支持注释&#xff0c;不支持字符串换行&#xff0c;所有的key都必须双引号&#xff0c;末尾不能有多余的逗号…等等&#xff0c;一大堆极其严格的要…

chatgpt赋能python:Python的退役与SEO

Python的退役与SEO 随着Python编程语言的流行和普及&#xff0c;越来越多的人开始使用它来开发各种类型的应用程序。但是&#xff0c;就像我们所知道的&#xff0c;所有技术都会发生变化&#xff0c;包括编程语言。因此&#xff0c;Python程式员可能会感到困惑和担忧&#xff…

JavaScript对象 (八):对象类型的使用、值类型和引用类型、函数的this指向、工厂方法创建对象、构造函数和类、new创建对象

1. 对象类型的使用 1.1 认识对象类型 基础数据类型可以存储一些简单的值&#xff0c;但是现实世界的事物抽象成程序时&#xff0c;往往比较复杂。 比如一个人&#xff0c;有自己的特性&#xff08;比如姓名、年龄、身高&#xff09;&#xff0c;有一些行为&#xff08;比如跑…

课程17:菜单管理功能实现

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

为什么运行时安全性重新流行起来?

容器通过以更高效和可扩展的方式创建、打包和部署应用程序&#xff0c;彻底改变了软件开发过程。 然而&#xff0c;能力越大&#xff0c;责任越大&#xff0c;对“左移安全性”的高度关注为那些在运行时忽视安全性的组织带来了风险。 通过对容器运行时安全采取多层次、全面的…

云服务器ECS_云主机_服务器托管_弹性计算-阿里云

阿里云服务器ECS&#xff08;Elastic Compute Service&#xff09;是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网分享阿里云服务器ECS详细介…

Linux文件操作四剑客

目录 一、grep &#xff08;一&#xff09;作用 &#xff08;二&#xff09;格式 &#xff08;三&#xff09;选项 &#xff08;四&#xff09;案例 1、查看/etc目录下所有包含bash的文件名&#xff1a;grep -rl bash /etc 2、查看/var/log目录下所有包含error的文…

读发布!设计与部署稳定的分布式系统(第2版)笔记04_集成点

1. 第一个拥有10亿用户的网站 1.1. 2016年&#xff0c;Facebook宣布其每日活跃用户数量为11.3亿 1.2. 对整个应用程序来说&#xff0c;“五个9”的可靠性远远不够&#xff0c;这每天会让成千上万的用户失望 1.3. 假如按照六西格玛质量标准来衡量&#xff0c;那么Facebook每天…