初学spring 框架(了解spring框架的技术背景,核心体现,入门案例)

目录

技术背景

为什么要学习spring 框架?

学习spring 框架可以解决什么问题?

了解spring框架的核心体现

入门案例

步骤

1 导入 依赖

2 搭建三层架构体现【根据实际情况 构建】

3 添加配置文件

Test 测试类中 从 Ioc 容器 获取 Student 对象

总结


技术背景

为什么要学习spring 框架?,和学习spring 框架可以解决什么问题?在学习spring的时候,我们要带着问题去学习。

为什么要学习spring 框架?

答:之前基于三层模型开发时,在业务逻辑的代码中能看到很多的手动new对象的代码,这样会造成高度耦合。

什么是高度耦合 ?,高度耦合有什么影响?

高度耦合是指系统或组件之间的依赖关系过于紧密,导致一个部分的改动会影响到其他部分。这种紧密依赖使得系统难以维护和扩展

高度耦合的影响:

  1. 维护困难:修改一个组件可能需要调整多个相关组件,增加了维护的复杂性和成本。

  2. 扩展性差:添加新功能时,可能需要改动大量现有代码,影响系统的灵活性和扩展性。

  3. 可重用性低:组件因依赖过多,难以独立使用,降低了代码的可重用性。

  4. 测试复杂:由于组件间依赖紧密,单独测试一个组件变得困难,增加了测试的复杂性。

  5. 风险增加:一个组件的错误可能波及整个系统,增加了系统故障的风险。

示例:

假设有一个电商系统,订单处理模块直接依赖库存管理模块和支付模块,且这些模块之间紧密关联。如果库存管理模块的接口变动,订单处理模块也需要相应调整,甚至可能影响到支付模块。

总结:

高度耦合会增加系统的复杂性,降低灵活性和可维护性。通过降低耦合,可以提高系统的模块化和可维护性。

为什么手动new对象的代码,这样会造成高度耦合?

答:接口和 实现类之前依赖特别紧密

原因:

  基于三层架构:无论是service,dao/mapper  都会有对应的实现类 实现对应的接口 。一般是 接口类型 接口名=new 具体实现类 如果实现类中【构造方法参数,实现类的类名】发生改变,那么因它导致之前通过 new 的对象 都会因此报错。为了解决这种 接口和 实现类这种 紧密的关系,才有了 spring 框架。

学习spring 框架可以解决什么问题?

学习spring 框架 可以  降低 耦合性 有利于 代码的维护 和扩展

第一个问题:spring 框架是怎么降低 耦合性的【具体的实现】?

  • 之前因 手动new 创建对象 导致 高度耦合性。spring 框架 是把  对象的创建权 从使用者,交给第三方 来实现 对象的创建 ,具体是 通过 工厂 来设计,生产 对象的。

第二问题:spring怎么知道 要生产什么样的对象?

  • 这在之后的学习会知道,通过在spring 的配置文件中 添加 目标对象  一般是通过<bean>...</bean> 实现

第三个问题:怎么从 spring 获得指定的对象?

  • 这在之后的学习会知道,创建一个容器对象,通过调用 getBean方法获得指定对象

第四个问题:如何管理 创建对象,对象和对象之前的 关系应该怎么维护?

  • 这在之后学习 Dl 依赖注入 会提到

根据上面提到的问题 spring 框架解决 主要依赖以下 spring框架的 核心

了解spring框架的核心体现

控制反转IOC )

指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后。对象的创建都是给了 Spring 框架。

应用场景:创建对象

依赖注入 DI  )

是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。

应用场景:为属性赋值【对象。。。。】

面向切面编程 (AOP )

 之后的博客会详细介绍IOC,Dl,AOP

入门案例

使用 IDEA 创建 Student 类 ,类中有3个字段 id,name ,gender 搭建 spring 框架  当 id=1 ,name=李华,gender=" 男"获取三个字段的值 并打印在控制台中。

步骤

1 导入 依赖

1.1 向 pom文件中添加 spring-context   依赖

步骤

1  从maven 中央仓库中获取  spring-context   依赖 坐标

  • 如果不清楚的,可以看 我之前写的博客:CSDN

2 复制粘贴到pom文件中,使用 <dependencies> </dependencies> 标签 包裹

3 刷新


 

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.23</version></dependency>

2 搭建三层架构体现【根据实际情况 构建】

2.1 基本的 service 层 ,dao/mapper 层 ,entity 【实体类】

3 添加配置文件

3.1 新建--xml配置文件-Spring 配置

3.2 创建完成后

3.3 为目标类 在xml 配置文件中添加 bean 标签

bean 标签的属性

  • id:唯一标识符
  • class:目标类的路径【包名+类名】

注意:每一个对象 都对应一个bean 标签

property标签 的属性

  • name: 字段名
  • value:给属性赋值

注意:给属性赋值,使用 property 标签

Test 测试类中 从 Ioc 容器 获取 Student 对象

步骤

1 创建 IOC容器对象

2 调用getBean方法

package fs;import fs.entity.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {//  创建 IOC容器对象的同时,加载配置文件ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml");// 调用 getBean 方法 通过向下转型的方式获得  Student 对象Student student = (Student) context.getBean("student");System.out.println(student);}
}

运行结果

总结

本篇博客,介绍了 为什么要学习 spring框架?,学习spring 框架可以解决什么问题?以及如何初步的使用 spring 框架 创建 对象

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户界面的UML建模11

然而&#xff0c;在用户界面方面&#xff0c;重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此&#xff0c;《exception》类能够聚合《boundary》类。 参见图12&#xff0c;《exception》Database…

IDEA的常用设置

目录 一、显示顶部工具栏 二、设置编辑区字体按住鼠标滚轮变大变小&#xff08;看需要设置&#xff09; 三、设置自动导包和优化导入的包&#xff08;有的时候还是需要手动导包&#xff09; 四、设置导入同一个包下的类&#xff0c;超过指定个数的时候&#xff0c;合并为*&a…

STM32-笔记39-SPI-W25Q128

一、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且 在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为…

uniapp小程序中隐藏顶部导航栏和指定某页面去掉顶部导航栏小程序

uniappvue3开发小程序过程中隐藏顶部导航栏和指定某页面去掉顶部导航栏方法 在page.json中 "globalStyle": {"navigationStyle":"custom",}, 如果是指定某个页面关闭顶部导航栏&#xff0c;在style中添加"navigationStyle": "cus…

【电子通识】PWM驱动让有刷直流电机恒流工作

电机的典型驱动方法包括电压驱动、电流驱动以及PWM驱动。本文将介绍采用PWM驱动方式的恒流工作。 首先介绍的是什么是PWM驱动的电机恒流工作&#xff0c;其次是PWM驱动电机恒流工作时电路的工作原理。 PWM驱动 当以恒定的电流驱动电机时&#xff0c;电机会怎样工作呢&#xff1…

Mysql--运维篇--主从复制和集群(主从复制I/O线程,SQL线程,二进制日志,中继日志,集群NDB)

一、主从复制 MySQL的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据冗余和高可用性的解决方案&#xff0c;它通过将一个或多个从服务器&#xff08;Slave&#xff09;与主服务器&#xff08;Master&#xff09;同步来实现。主从复制的基本原理是&#…

Mac 删除ABC 输入法

参考链接&#xff1a;百度安全验证 Mac下删除系统自带输入法ABC&#xff0c;正解&#xff01;_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态&#xff0c;可以删除 &#xff1b;可能会对DNS 输入有影响&#xff0c;但是可以通过复…

Mac——Cpolar内网穿透实战

摘要 本文介绍了在Mac系统上实现内网穿透的方法&#xff0c;通过打开远程登录、局域网内测试SSH远程连接&#xff0c;以及利用cpolar工具实现公网SSH远程连接MacOS的步骤。包括安装配置homebrew、安装cpolar服务、获取SSH隧道公网地址及测试公网连接等关键环节。 1. MacOS打开…

Unity中对象池的使用(用一个简单粗暴的例子)

问题描述&#xff1a;Unity在创建和销毁对象的时候是很消耗性能的&#xff0c;所以我们在销毁一个对象的时候&#xff0c;可以不用Destroy&#xff0c;而是将这个物体隐藏后放到回收池里面&#xff0c;当再次需要的时候如果回收池里面有之前回收的对象&#xff0c;就直接拿来用…

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中&#xff0c;我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤&#xff0c;但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式&#xff08;Template Method Design Pattern&#xff09;就为解决这类问题提供了…

【大模型】Langchain-Chatchat-v0.3.1 的环境配置

1 Langchahin-chatchat的工程简介 本项目是利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 本项目的最新版本中可使用 Xinference、Ollama 等框架接入 GLM-4-Chat、 Qwen2-In…

jenkins的作用以及操作

一 jenkins 1.1 概念 1.2 流程 1.2.1 流程 1.2.2 配置 1.3 jenkins容器自动化部署

【UE5 C++课程系列笔记】29——在UE中使用第三方库的流程

目录 前言 步骤 一、新建插件 二、创建第三方库 三、使用第三方库 前言 主要就是介绍如何将普通C++工程生成的头文件和.dll导入到UE中去使用。 步骤 一、新建插件 1. 打开插件浏览器选项卡 2. 打开插件创建器 3. 选择“第三方库”,这里命名为“MyThirdPartyLibrary…

Mybatis——Mybatis开发经验总结

摘要 本文主要介绍了MyBatis框架的设计与通用性&#xff0c;阐述了其作为Java持久化框架的亮点&#xff0c;包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时&#xff0c;对比了常见持久层框架&#xff0c;分析了MyBatis在关系型数据库交互中的优势。此外&#xff0…

【数据结构-堆】【二分】力扣3296. 移山所需的最少秒数

给你一个整数 mountainHeight 表示山的高度。 同时给你一个整数数组 workerTimes&#xff0c;表示工人们的工作时间&#xff08;单位&#xff1a;秒&#xff09;。 工人们需要 同时 进行工作以 降低 山的高度。对于工人 i : 山的高度降低 x&#xff0c;需要花费 workerTimes…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同&#xff0c;在于TCP是有连接、可靠、面向字节流的。具体来说&#xff0c;TCP设置了一大…

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…

3 前端: Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…

STM32如何测量运行的时钟频率

前言 环境&#xff1a; 芯片&#xff1a;STM32F103C8T6 Keil&#xff1a;V5.24.2.0 一、简介STM32F103C8T6的时钟源 ①HSI 内部高速时钟,RC振荡器&#xff0c;频率为8MHz&#xff0c;精度不高。②HSE 外部高速时钟,可接石英/陶瓷谐振器&#xff0c;频率范围为4MHz~16MHz&…

项目实战--网页五子棋(用户模块)(1)

接下来我将使用Java语言&#xff0c;和Spring框架&#xff0c;实现一个简单的网页五子棋。 主要功能包括用户登录注册&#xff0c;人机对战&#xff0c;在线匹配对局&#xff0c;房间邀请对局&#xff0c;积分排行版等。 这篇文件讲解用户模块的后端代码 1. 用户表与实体类 …