Spring的核心思想

news2024/9/29 9:34:26

目录

一、Spring要解决的问题

二、Spring的核心结构

三、核心思想

3.1.1 什么是IOC

3.1.2 IOC解决的问题:耦合

3.1.3 IOC和DI的区别

3.2.1 什么是AOP

3.2.2 AOP解决的问题:耦合

3.2.3 为什么叫做面向切面编程


一、Spring要解决的问题


问题1:系统的类与类之间的依赖性,导致改一个类,可能相关的引用类都得改,牵一发而动全身。
解决方法:解耦,让bean的全生命周期管理(bean的定义、bean的初始化、bean的增强)由spring进行控制

问题2:很多复杂的功能比如事务、http请求等,用命令式编程,了解实现细节,会有比较大的复杂度
解决方法:简化,spring将一些复杂功能实现,使用者不需要关注实现细节,直接通过声明式编程(注解+配置)使用,大大降低了复杂度

比如:
http请求的解析-->http请求框架
字符串的增删改-->stringutil字符串编辑框架
对象之间的关联和创建和对象生命周期的管理-->IOC框架

二、Spring的核心结构

三、核心思想

3.1.1 什么是IOC


IoC:Inversion of Control (控制反转/反转控制),是一个技术思想,将对象创建(实例化、管理)的控制权交给外部环境(spring框架、ioc容器)

描述的事情:Java开发领域对象的创建(实例化)、管理的问题

举例:
传统开发方式:比如类A依赖于类B,往往会在类A中new一个B的对象

IoC思想下开发方式:我们不用自己去new对象了,而是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使用哪个对象,去问IoC容器要即可

3.1.2 IOC解决的问题:耦合


比如:service层调用dao层时,只需要调用接口userService,而不需要知道具体的实现类userServiceImpl

3.1.3 IOC和DI的区别


DI:Dependancy Injection(依赖注入)

IOC和DI描述的是同一个事情,只不过角度不同
IOC是站在对象的角度,对象实例化及其管理的权利交给了(反转)容器
DI是站在容器的角度,容器会把对象依赖的其他对象注入(送进去)

3.2.1 什么是AOP


AOP: Aspect oriented Programming 面向切面编程/面向方面编程

AOP是OOP的延续,OOP三大特征:封装、继承和多态,OOP是一种垂直继承体系

OOP编程思想可以解决大多数的代码重复问题,但是有些情况是处理不了的,比如在类的多个方法中相同位置出现了重复代码,比如计算每个方法用了多长时间来进行性能监控,方法开头一个查询当前时间调用,方法结尾一个查询当前时间调用并计算时间差。

横切逻辑代码

横切代码逻辑的问题:
· 横切代码重复问题
· 横切逻辑代码和业务代码混杂在一起,代码臃肿,维护不方便

AOP提出了横向抽取机制,将横切逻辑代码和业务逻辑代码拆分,在不改变原有业务逻辑的情况下,悄无声息的把横切逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果

3.2.2 AOP解决的问题:耦合


在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复

3.2.3 为什么叫做面向切面编程


「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以面向横切逻辑
「面」:横切逻辑代码往往要影响的是很多个方法,每一个方法都如同一个点,多个点构成面,有一个面的概念在里面

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

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

相关文章

道路检测-目标检测数据集(包括VOC格式、YOLO格式)

道路检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1nDwTmZxH_BQrVTj9MzUgDg?pwd3zh7 提取码:3zh7 数据集信息介绍: 共有 3321张图像和一一对应的标注文件 标注文…

Excel 国产化替换新方案

前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…

衡石分析平台使用手册-通用配置文档

配置文件​ 配置文件中存放 HENGSHI SENSE 的配置参数,可以通过修改配置文件来改变 HENGSHI SENSE 的服务方式。 配置文件说明​ 配置文件存放在 conf 路径下,包含 hengshi-sense-env.sh 和 engine-segment-hosts 两个文件。其中 engine-segment-host…

Qt与VS打包命令

一 QT 将程序编译生成的可执行文件(.exe)放到一个干净的文件夹。找到QT安装目录,进入编译版本的bin目录,找到windeployqt.exe,在文件访问路径栏的最前边,添加“cmd ”进入控制台。控制台命令: …

K8s 简介以及详细部署步骤

Kubernetes 简介 应用部署方式演变 在部署应用程序的方式上,主要经历了三个阶段: 1、传统部署 互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源…

【Java面试】第七天

🌟个人主页:时间会证明一切. 目录 有三个线程T1,T2,T3如何保证顺序执行?依次执行start方法使用join使用CountDownLatch使用线程池使用CompletableFuture Spring Bean的生命周期是怎么样的?Autowired和Resource的关系?相…

使用Python生成多种不同类型的Excel图表

目录 一、使用工具 二、生成Excel图表的基本步骤 三、使用Python创建Excel图表 柱形图饼图折线图条形图散点图面积图组合图瀑布图树形图箱线图旭日图漏斗图直方图不使用工作表数据生成图表 四、总结 Excel图表是数据可视化的重要工具,它通过直观的方式将数字信…

Linux环境

Linux环境 导语程序参数getoptgetopt_long 环境变量getenv/putenvenviron 时间和日期timedifftime和gmtimectime&asctimestrftime/strptime 临时文件tmpnamtmpfile 获取信息用户主机日志 资源和限制总结参考文献 导语 任何程序都是在一定的环境下运行的,通常这…

分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata

文章目录 前言2 Seata2.1 Seata的架构2.2 部署TC服务1)下载安装包2)解压3)修改配置文件4)在Nacos中添加TC服务配置5)创建数据库表6)启动TC服务7)查看TC服务 2.3 微服务集成Seata2.3.1 引入依赖2…

通过覆写 url_for 将 flask 应用部署到子目录下

0. 缘起 最近用 flask 写了一个 web 应用,需要部署到服务器上。而服务器主域名已经被使用了,只能给主域名加个子目录进行部署,比如主域名 example.org ,我需要在 example.org/flask 下部署。这时 flask 应用里的内部连接们就出现…

sqli-labs Basic Challenge Less_1 通关指南

sqli-labs Basic Challenge Less_1 通关指南 测试注入点测试注入点的数据类型测试过程: 测试返回点:测试列数:测试返回点: 收集数据:版本用户权限库名表名与列名 查找敏感信息 测试注入点 在进行SQL注入之前&#xff…

React js Router 路由 2, (把写过的几个 app 组合起来)

完整的项目,我已经上传了,资源链接. 起因, 目的: 每次都是新建一个 react 项目,有点繁琐。 刚刚学了路由,不如写一个 大一点的 app ,把前面写过的几个 app, 都包含进去。 这部分感觉就像是, …

打包部署若依(RuoYi)SpringBoot后端和Vue前端图文教程

打包后端‘ 1,打开若依,点击右侧的Maven展开Maven管理,选择ruoyi>Lifecycle 先双击clean清除原本启动项目时生成的文件。然后点击package等待项目打包,切记要取消运行再打包 打包完成后会在ruoyi-admin>src>target里面…

Qt 边框border - qss样式

border属性 实际上,border并不是一个单独的属性,在Qt样式表中,它通常指的是一系列与边框相关的属性的组合。然而,你也可以在一条样式规则中一次性设置所有这些值,如下所示: QPushButton { border: 2px sol…

HTB-Unified(log4j2漏洞、MongoDb替换管理员密码)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Unified靶机 渗透过程 信息搜集 服务器开放了SSH服务,HTTP服务 访问网站 验证log4j2漏洞 8443端口:UniFi 网络 ,访问查询 是否有Nday漏洞利用 可以观察到UniFi的版…

汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)

题目: 编写一段主引导扇区程序,计算从1加到1000的和,并在屏幕上显示结果 输出结果: 代码: jmp near start text db 123...1000 start:mov ax,0x07c0mov ds,ax ;数据段从主引导区开始mov ax,0xb800mov es,ax ;显存地址从B8000物理地址开始mov si,text ;si指向text的第…

linux系统安装miniconda3

一、下载minconda3 下载地址:https://docs.conda.io/en/latest/miniconda.html 一般国内访问比较困难,可到清华软件镜像站 Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 需要特别注意自己的下载版本和自己的…

苹果CMS海洋CMS那个更容易被百度收录?苹果CMS站群

SEO优化和搜索引擎的友好性常常是网站管理员关注的重点。苹果CMS(maccmscn)和海洋CMS都是国内常见的CMS平台,但在搜索引擎优化(SEO)和百度收录方面,苹果CMS凭借其优秀的插件生态系统,特别是泛目…

Java 类一口气给你讲完!(✿◡‿◡)

Java 类实例 Java面向对象设计 - Java类实例 以下是创建类的实例的一般语法: new <Class Constructor>;new 运算符后面是对构造函数的调用。 new 运算符通过分配堆上的内存来创建类的实例。以下语句创建Dog类的实例: new Dog();Dog()是对Dog类的构造函数的调用。 当…

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录 一、导言 二、相关工作 1、基于Transformer的点云配准 2、针对点云的局部注意力 三、PTT 1、KPconv提取特征 2、Tree Transformer Encoder 3、Decoder 4、估计姿态 5、损失函数 四、实验 1、对比不同Backbone 2、运行时间对比 3、对比不同PTT方法下RR指标的…