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

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

文章目录

  • 前言
  • 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的入门案例💪💪
  最后,如果有什么错误的话,大家可以私信我📬📬,最后希望大家多多关注+点赞+收藏^_^🙏🙏,你们的鼓励是我不断前进的动力💪💪!!!

相关文章:

  • 剑指offer----C语言版----第一天
  • 量子计算(十八):量子计算机
  • c语言操作符(上)
  • 计算机基础知识(基础入门小白专属)五
  • Python实现模拟退火算法
  • 失业之后,我都干了啥
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • 知识付费海哥:知识变现三剑客
  • synchronized原理剖析与优化视频教程
  • 马上又是新的一年了 “跨年倒计时”送给大家
  • 【Flask框架】——28 Flask_SQLAlchemy
  • Debian系列-开机启动程序
  • Redis中的哨兵机制
  • Weda创建视图表格
  • C++类和对象概念及实现详解(下篇)
  • Angular 响应式表单之下拉框
  • CSS实用技巧干货
  • JavaScript新鲜事·第5期
  • JS专题之继承
  • Phpstorm怎样批量删除空行?
  • XForms - 更强大的Form
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 工作中总结前端开发流程--vue项目
  • 力扣(LeetCode)965
  • 我建了一个叫Hello World的项目
  • 我是如何设计 Upload 上传组件的
  • 在weex里面使用chart图表
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​如何防止网络攻击?
  • !$boo在php中什么意思,php前戏
  • ![CDATA[ ]] 是什么东东
  • # .NET Framework中使用命名管道进行进程间通信
  • #APPINVENTOR学习记录
  • #stm32驱动外设模块总结w5500模块
  • #数学建模# 线性规划问题的Matlab求解
  • $NOIp2018$劝退记
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (三)Honghu Cloud云架构一定时调度平台
  • (三)模仿学习-Action数据的模仿
  • (三)终结任务
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Scala的“=”符号简介
  • (转)VC++中ondraw在什么时候调用的
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .net core 连接数据库,通过数据库生成Modell
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net 获取url的方法
  • .NET 解决重复提交问题
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .Net开发笔记(二十)创建一个需要授权的第三方组件