用基础项目来理解spring的作用

news2024/9/23 17:20:11

简介

spring官方的解释过于专业化,初学者可能比较难懂,接下来我将通过一个最基础的Java项目来尽可能的展示spring中的作用及spring的底层是如何来实现的。

项目结构

该项目是一个简单的JavaSE项目,没有maven或者tomcat等其他。只在控制台进行结果的输出。

首先我分为了四层分别是beans,controller,dao,service以及一个测试类。 

dao层和service层我只做了简单的输出语句,用来表示已经进入了此方法内部。

 现在有两个service层的类,分别是UserServiceImpl和UserServiceImpl01,红色框住是他们各自类中的业务,我们假设此时的业务较多,不只是简单的一个输出语句。在真实的业务中,如果我们想要进行更换service层的实现类,那么我们不仅需要去改此处的代码,并且还要对每一个调用到此service的代码部分都进行统一的修改。此时就会发现我们的工作量很大。最主要的一个原因就是代码的耦合度高,导致许多的代码紧密连接到了一块,不利于后期代码的维护。

那么spring就很好的帮助我们去解决了这样的一个问题,也就是他的依赖注入的一个功能,

  1. 依赖注入 (Dependency Injection, DI):Spring通过IoC容器自动管理对象之间的依赖关系,使得代码解耦,更容易测试。

主要部分演示

我们首先在D盘创建一个txt文件,其内容是我们要调用的某个类的全路径类名,然后通过字符流来读取文件中的内容。当读取完成后,我们就能通过反射的技术,获取到类对象,然后使用newInstance()方法来创建一个对象。之后继续调用service层的方法即可。

之后如果我们想要切换类对象,那么我们只需要修改文件中的内容即可,不需要在去代码中进行修改。这就是spring底层的一个实现原理,也就是反射。使用spring框架后,不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”,注入即赋值。

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

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

相关文章

【UE5】基于摄像机距离逐渐剔除角色

效果 步骤 1. 新建一个工程,在内容浏览器中添加第三人称游戏内容包 2. 找到第三人称角色的材质实例“MI_Quinn_01”并打开 找到材质实例的父项材质“M_Mannequin” 打开材质“M_Mannequin” 在材质图表中添加如下节点 此时运行效果如文章开头所示。 参考视频&#…

node版本8.x→16.x,前端维护火葬场,问题及解决方案总结

为了后续的工程开发,我需要升级我的node,在此之前我的node版本是8,这个版本太老了,从8升级到16的跨度太大,对于以前的许多项目,产生了非常多维护方面的问题,历时四天终于全部解决了,…

python中的randint如何使用

python中的randint用来生成随机数,在使用randint之前,需要调用random库。random.randint()是随机生成指定范围内的整数,其有两个参数,一个是范围上限,一个是范围下限。 具体用法如下: import random print…

Redis系列之事务

概述 Redis事务提供一种将多个命令打包,然后一次性、按顺序地执行的机制,在事务执行的期间不会主动中断,服务器在执行完事务中的所有命令之后,才会继续处理其他客户端的其他命令。 三个重要的保证: 批量操作在发送E…

el-table中el-select俩列共用同一数据并且选择不能相同

需求:el-table中有el-select,el-select的下拉数据源是相同的,但是要同一行的俩列数据选择不相同,如果相同需要提示并且清空数据 1.效果 2.主要代码详解 主要是 change"handleChange(后人员, scope.$index, scope.row.new_use…

关于侵害用户权益行为app的通报的一些思考

8月16日上海市通信管理局官方微信公众号“上海通信圈”发布《上海市通信管理局关于侵害用户权益行为app的通报(2024年第一批)》。本次app通报为2024年第一批。内容显示本次共通报26款移动互联网应用程序涉及app和小程序。 应用来源:本次检测…

【深海王国】小学生都能玩的语音模块?番外1:ASRPRO控制继电器开关

Hi~ (o ^ ^ o)♪, 各位深海王国的同志们,早上下午晚上凌晨好呀~ 辛苦工作的你今天也辛苦啦(/≧ω) 今天大都督为大家带来语音模块的番外系列——ASRPRO控制继电器开关,帮你学会使用ASRPRO控制继电器开关电器元件,let’s go! 番外…

学习大数据DAY39 基于 hive 的 SQL语句

目录 hive 介绍以及应用 上机练习 hive 介绍以及应用 --查看数据库 show database db_hive --过滤查看数据库 show databases like db_hive*; --查看详情 desc database db_hive desc database extended db_hive; --查看表 show tables; --查看表列详情 desc dept…

小学二年级数学精选试题

小学二年级数学精选试题

leetcode 089 打家劫舍

leetcode 089 打家劫舍 题目 一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定…

【计算机网络】网络版本计算器

此前我们关于TCP协议一直写的都是直接recv或者read,有了字节流的概念后,我们知道这样直接读可能会出错,所以我们如何进行分割完整报文?这就需要报头来解决了! 但当前我们先不谈这个话题,先从头开始。 将会…

GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹

0序: 在大疆遥控器或者司空2中设置航线,都是一个个的航点,如果把航点转为航线,在三维地球中显示其空间效果。用于分析和实际物体的距离,或者展示该航线都做了哪些方面的考虑。 如何把一堆点连城一条线? 本…

进程相关命令和函数

查询进程相关命令 ps aux 查看进程相关信息 1.就绪态、运行态 R 2.睡眠态、等待态 可唤醒等待态 S 不可唤醒等待态 D 3.停止态 T 4.僵尸态 Z 5.结束态 top 根据CPU占用率查看进程相关信息 kill 和killall kill和killall发送一个信号 kill -2 PID 15 发送信号PID对应的进程&…

又一实锤 美元丧钟敲响

文|琥珀食酒社 作者 | 积溪 咱们又要见证历史了 之前我说美元霸权快终结了 没想到马上又来了一个实锤 就在刚刚 “159个国家将采用金砖国家新支付系统“的消息 冲上热搜 据大毛媒体爆料 这个新支付系统 将在今年10月份上线 替代现有的swift系统 这是要挖…

nginx的详细介绍及配置

Nginx(发音为“engine X”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。它最初由俄罗斯人Igor Sysoev编写,并于2004年首次公开发布。N…

解决旧版CMS内容管理无法登录的问题

最近遇到了输入正确的账户密码,旧版的CMS内容管理的平台提示登录成功却无法跳转的问题 遇到这种情况请不要慌!!! 请按照下面的步骤解决问题: 1.点击账号管理 2.点击右上角的返回旧版控制台 3.点击cloud1环境 4.点击扩…

财务会计与管理会计(十一)

文章目录 快速切换日记账余额SUMPRODUCT、LOOKUP函数应用 销售业绩分段统计表SUMPRODUCT函数的应用 自动打印发票签收单VLOOKUP函数的应用 快速切换日记账余额 SUMPRODUCT、LOOKUP函数应用 C2SUMPRODUCT((A5:A100B2)*C5:C100) D2SUMPRODUCT((A5:A100B2)*D5:D100) E4公式1&…

javaweb学习之HTML(一)

推荐学习使用网站 w3school 在线教程 认识HTML HTML(HyperText Markup Language)是超文本标记语言,它是一个用于创建网页和网页应用程序的标准标记语言。HTML文档由一系列的元素(elements)组成,这些元素通…

大模型日报|10 篇必读的大模型论文

大家好,今日必读的大模型论文来啦! 1.斯坦福推出大模型网络安全能力和风险评估框架 Cybench 用于网络安全的语言模型智能体(agent)能够自主识别漏洞并执行漏洞利用,有可能对现实世界造成影响。政策制定者、模型提供者…

海外媒体投稿:怎样在法国媒体发稿宣传中获得成功

法国是一个充满机遇的销售市场,而媒体发稿营销推广是企业在法国市场里扩张曝光度和提升知名度的有效途径。下面我们就共享如何运用低投资得到高收益的办法,帮助企业在法国媒体发稿推广过程中获得成功。 第一步:掌握目标群体在进行法国媒体发稿…