【Spring(二)】IoC入门案例(XML版)

news2024/11/18 1:39:29

文章目录

  • 前言
  • 1.IoC入门案例
  • 总结

前言

  上篇文章我们讲了IOCDI两个核心概念,本篇文章我们会在Spring的环境下来实现它们💪💪。

1.IoC入门案例

  我们先来实现IoC也就是管理Bean的这套模式,我们先来说说这套程序应该怎么做,对于IoC的入门案例,首先我们需要思考以下问题👇👇。

  第一个问题,管理什么?🎈🎈

  也就是我的Spring容器(也就是IoC容器,以下我们都称为Spring容器)要管的东西是什么?那肯定是对应的Bean🎉🎉。也就是你原来造对象的那些类,是不是我要管完以后把它放到我们的Spring容器中变成Bean🚨🚨。所以说我们就知道管什么,也就是service和dao🚩🚩。

  我们知道管理什么了,那如何将被管理的对象告知Spring容器呢🎈🎈?

  只有一种可能性,那就是用配置的方式来告诉Spring容器。也就是说我写个配置文件,里边写清楚service你管,dao你也管🤣🤣,所以说在这要用配置🚩🚩。

  知道怎么样告诉Spring容器了,接下来如何获取到Spring容器?🎈🎈

  被管理的对象交给Spring容器,你也管好了,下边我要用了,我是不是得从你里边拿出来,你是谁呢,换句话说,Spring容器怎么得到呢✍️✍️,这是不是一个问题,那我们就想,Spring是一个技术,现在你要用它里边的东西,它必然得给你提供出来一个接口来让你用🎉🎉,不然我们怎么操作呢,所以说在这会有一个接口🚩🚩。

  Spring容器得到后,如何从容器中获取Bean?🎈🎈

  那么接口有了,容器拿到了,我现在就想从你这里边把我配置的这些东西也就是Bean拿出来了,是不是得有个操作啊🚨🚨,那接口必然里边得有一些操作嘛,所以我们用接口的方法把它拿出来🚩🚩。

  那我们现在就来按照以上过程来做一下☝️☝️,Bean是不是就得到了😄😄!在我们演示之前,还有一个问题,我们要使用Spring技术,肯定要导入一些坐标🎈🎈。

  这些坐标应该写在哪里呢,应该写在pom.xml文件里边🎉🎉!至于导入什么,我们一会来看🤣🤣。

在这里插入图片描述

  我们现在所看到的的程序结构☝️☝️,包括业务层接口,业务层实现类,数据层接口,数据层实现类,业务层接口对应的实现类中,有一个save()方法,方法里边先是一条打印语句,然后转调了数据层的save()方法👇👇。在这里插入图片描述

而数据层这边也有一句打印,打印的东西不一样👇👇。
在这里插入图片描述

我们先来运行程序,这是非Spring环境下的👇👇。
在这里插入图片描述
运行结果👇👇
在这里插入图片描述

  我们接下来说程序应该怎么写✍️✍️🎉🎉。

  刚才说过了,我们现在想交给Spring容器管理,必须先来一个配置文件,那我们先去写一个配置文件👇👇。
在这里插入图片描述

  在没配置之前,里边应该没有Spring的结构供我们选择,这是为什么呢?是因为我们还没有导包🎈🎈。

  接下来我们在pom.xml文件中进行导包,5.2.10版本相对稳定一些👇👇。
在这里插入图片描述
  看到如下图👇👇,就表示成功导入包了🎉🎉
在这里插入图片描述
现在我们就可以创建Spring的配置文件了👇👇🎈🎈。
在这里插入图片描述

  那么该如何命名Spring的配置文件呢🎈🎈?

  应该将配置文件命名为 applicationContext.xml把它创建出来👇👇
在这里插入图片描述

  创建完成后,在里边我们就可以做具体的内容了🎈🎈

  接下来我们就要在里边配置对应的Bean了,也就是说刚才咱们说的对象交到Spring容器中叫Bean,那么Bean该怎么配置呢🧐🧐👇👇 ?
在这里插入图片描述
  通过属性Class可以告诉Spring容器应该管理哪个对象,路径为实现类的全类名。现在我们已经配好了,配好以后我们想,我们已经把它配进去了,Spring容器里边也有了,回头我们要拿,没个名,我们怎么拿呀,根本不知道拿谁🤣🤣,属性id就是来解决这个问题的,名字可以随便起,到这里,我们就已经配好了一个Bean了🎉🎉。service的配置也一样👇👇。
在这里插入图片描述

  下面我们就可以拿容器然后去拿这个Bean了🎈🎈。

  我们再写一个新的App运行程序✍️✍️,在这里我们必须知道,要想拿Bean,必须先拿容器,怎么拿呢,这个东西又叫什么呢,这个名称和我们配置文件的名称刚好一样,叫做applicationContext🤣🤣 ,但是它是一个接口,我们要用它的实现类叫做ClassPathXmlApplicationContext 👇👇。
在这里插入图片描述
  现在我们已经创建好了一个容器了,如果我们没有加载我们的配置文件,是不是也什么也拿不到呀🚨🚨!所以要把这个配置文件作为参数告诉容器☝️☝️,到这里Spring容器就拿到了🎉🎉。

  完了以后应该干什么呢,是不是就应该拿我们的Bean了🚩🚩。那么怎么获取Bean呢,肯定是通过这个Spring容器来拿👇👇。
在这里插入图片描述
  这个参数是什么呢,就是你配置的Bean叫啥名,这个参数就传什么😄😄。我们拿到的是一个Object对象,需要对它进行强转☝️☝️。现在就拿到了,剩下的事情就和Spring没关系了🤣🤣,拿到对象直接调用里边的方法就行了 ☝️☝️。
  我们这里拿的是dao,service的原理也是一样的👇👇。
在这里插入图片描述
  运行结果👇👇
在这里插入图片描述
  到这里我们IoC的入门案例就做完了🎉🎉

总结

  在实现IoC的入门案例中,我们先进行了导如入Spring坐标🚩🚩,没这一步,连配置文件的结构我们都找不到🤣🤣,接下来定义Spring管理的类(接口)🎈🎈,第三步创建Spring配置文件,配置对应类作为Spring管理的Bean🎉🎉,我们需要注意的是Bean定义时id属性在同一个上下文中不能重复🚨🚨,,第四步初始化Spring容器,通过容器来拿配置好的Bean,一定要记住我们是用它的实现类:ClassPathXmlApplicationContext✍️✍️。
  到这里我们就已经做完了IoC的入门案例了,虽然我们已经做完了案例,但是我们现在的业务层里边还是使用new什么什么的,也就是说我们充分解耦的效果并未达到,怎么做呢,我们下篇文章再来讲解DI的入门案例💪💪
  最后,如果有什么错误的话,大家可以私信我📬📬,最后希望大家多多关注+点赞+收藏^_^🙏🙏,你们的鼓励是我不断前进的动力💪💪!!!

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

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

相关文章

深度学习Week12-训练自己的数据集(YOLOv5)

这周接着详细解析小白YOLOv5全流程-训练实现数字识别_牛大了2022的博客-CSDN博客_yolov5识别数字,上周入门教大家下载配置环境,如果没有的话请参考上周的文章深度学习Week11-调用官方权重进行检测(YOLOv5)_牛大了2022的博客-CSDN博…

《IDC MarketScape:2022全球通用计算机视觉厂商评估》出炉,腾讯云智能入选

近日,全球领先的IT市场研究和咨询公司IDC发布了2022年度《MarketScape:全球通用计算机视觉厂商评估》报告(以下简称“报告”),腾讯云智能凭借在计算机视觉领域领先的技术积累、出色的产品能力和丰富的行业落地实践&…

案例分享:硬件敏捷

“没有人能够在硬件领域推动以两周为单位的循环迭代!”当人们谈起敏捷方法在包含了硬件及软件产品开发时,第一反应都是类似的论调。然而,已经有一些团队,尝试将已有的可靠硬件开发理念与少量从敏捷软件中借鉴的新鲜思想结合&#…

系统日志- Journal and Rsyslog

Log文件 Rsyslog 的配置文件/etc/rsyslog.conf Rsyslog的旧的信息会在最前面,新的信息会在最下面。 tail -f /var/log/messages #可以动态监控日志信息logger 发送日志信息 logger -p user.notice #“内容” -p选项测试实验: 1.在/etc/rsyslog.d/文…

基于ThinkPHP框架开发的全套家政服务小程序源码(带调试视频)

家政服务小程序源码 在线派单 商家入驻 多城市带积分开源小程序 了解更多内容可私信我。 1、独立版 ThinkPHP框架 后端全开源; 2. 开发语言:PHP; 3. 数据库:MySQL; 4.小程序端:Uniapp; 5.…

Vuex基础概念用法(新手入门)

一.Vuex概念及解释 定义: vue全局状态管理器。有了Vuex在任意组件/页面都可以访问vuex数据,当数据更新的时候,引用vuex的组件视图会自动更新。也就是说Vuex实现数据全局共享,响应式更新。 1.state(存放状态) $store…

《flask》flask+mqtt联动快速上手

简介 本文旨在介绍如何快速上手联动flask mqtt,本文将会给出一个简单的demo,用于演示在如何通过访问flask接口来触发mqtt,并在flask运行的基础的上对mqtt进行订阅。 快速上手 因为有项目需求,所以需要flask mqtt进行联动&…

Docker网络中篇-docker网络的四种类型

通过上一篇学习,我们对docker网络有了初步的了解。本篇,咱们就来实战docker网络。 docker网络实战 实战docker网络,我们将从以下几个案例来讲解 1:birdge是什么? 2:host 3:none 4:container 实战网络类型如下: 在docker中,网络的配置是以json格式存在的,下面…

知识变现创业者必读——《知识变现实操手册》

现在越来越多人,正在跑步进入知识变现创业这个赛道。 为什么进入这个赛道,因为能赚钱钱啊,大部分人是受到了知识变现大咖们日入万元,月入十万,这些赚钱效益的刺激,匆忙进入的。 我问一句,你知识…

网络路由技术和协议

网络路由是网络通信的重要组成部分。路由可帮助您的网络组件从可用选项中选择最佳网络路径。这使得网络通信高效可靠。启用此功能的硬件组件称为路由器。监控和管理路由器是网络管理员日常工作中不可或缺的一部分。由于路由器可以决定网络连接和可用性的成败,因此了…

MATLAB-plot绘图函数

plot函数是MATLAB中最核心的二维绘图函数,它有多种语法格式可以实现多种功能。 plot函数的基本调用格式如下。 plot(y) 当y为向量时,是以y的分量为纵坐标、元素序号为横坐标,用直线依次连接数据点, 绘制曲线。若y为实矩阵&#…

【技术分享】如何实现功能完备性能优异的RTMP、RTSP播放器?

技术背景 这几年,我们对接了太多有RTSP或RTMP直播播放器诉求的开发者,他们当中除了寻求完整的解决方案的,还有些是技术探讨,希望能借鉴我们播放端的开发思路或功能特性,完善自己的产品。 忙里偷闲,今天我…

【GO】K8s 管理系统项目[API部分--Pv]

K8s 管理系统项目[API部分–Pv] 1. 接口实现 service/dataselector.go type pvCell corev1.PersistentVolumefunc(p pvCell) GetCreation() time.Time {return p.CreationTimestamp.Time }func(p pvCell) GetName() string {return p.Name }2. Pv功能 service/pv.go 2.1 获…

沙龙预告|2023 年展望 Web3 Crypto

全长 621 字,预计阅读 3 分钟 作者:MiX 起起落落的2022年即将结束,随着传统金融机构的采用和 Web3 创新的不断深入,加密领域已经成为全球资本和技术创新的重要组成部分。 总结2022,展望2023,这对每一位加…

【数据库与缓存保持一致性】

文章目录1. 方案1先更新数据库,再更新缓存先更新缓存,在更新数据库2. 方案2先更新数据库,在删缓存先删缓存,在更新数据库3. 方案3—如何保证两个操作都能执行成功?重试机制订阅 MySQL binlog1. 方案1 先更新数据库&am…

S7-1200PLC与组态王进行TCP通信的基本方法和步骤

S7-1200PLC与组态王进行TCP通信的基本方法和步骤 如下图所示,打开博途软件,新建一个项目,设置该PLC的IP地址为:192.168.1.102, 如下图所示,在OB1中编写一段简单的启保停程序, 如下图所示,打开Kingview组态王软件,点击文件—新建工程, 新建一个项目,如下图所示…

化工企业安全风险管控数字化解决方案

当前我国化工行业的基础能力缺失问题非常严重。由于一些共性技术的缺失,给以化工行业为代表的关键基础工业的产业安全带来诸多隐患。粗放式发展 带来的环保安全问题,不仅造成了巨大的资源浪费和社会成本的增加,同 时也使整个产业的发展环境恶…

SpringBoot+Vue前后端分离项目搭建

好久没写文章了!!! 企业级项目,开袋即食。扩展、修改起来非常方便 系统基本功能 用户管理:提供用户的相关配置,新增用户后,默认密码为:Pass_123角色管理:对权限与菜单…

基于注解的AOP之切入点表达式的语法和获取连接点的信息以及切入点表达式的重用

基于注解的AOP之切入点表达式的语法和获取连接点的信息以及切入点表达式的重用 1.切入点表达式的语法 ①作用 ②语法细节 用*号代替“权限修饰符”和“返回值”部分表示“权限修饰符”和“返回值”不限 在包名的部分,一个“*”号只能代表包的层次结构中的一层&…

Vue3+TS+Vant3——增删改input和通过双页面进行增删改操作

Vue3TSVant3——增删改input和通过双页面进行增删改操作 两种方案: 第一种点击添加按钮添加一项,缺点:页面过于臃肿,用户体验较差 第二种:分成两种页面进行添加等操作 先说一下第一种,我这里用到了va…