Spring核心设计思想

news2024/12/24 3:02:11

目录

前言:

Spring是什么

什么是IoC

传统开发思想

IoC开发思想

Spring IoC

什么是DI

小结:


前言:

    官网中提出:Spring makes programming Java quicker, easier, and safer for everybody. Spring’s focus on speed, simplicity, and productivity has made it the world's most popular Java framework.

    Spring 使编程 Java 对每个人来说都更快、更容易、更安全。Spring专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。

Spring是什么

    Spring是包含众多方法的IoC容器。这句话怎么理解呢?什么是容器?什么又是IoC?

    Java中也有一些容器,比如ArrayList,LinkedList,HashMap等等一些集合。这些集合其实就是容器。当我们使用这些集合类的时候,直接就可以使用集合为我们提供的一些方法。它把我们常用的操作都封装到集合中了,我们只需要明确集合为我们提供的方法就可以使用各种集合了。

    Spring IoC容器最核心的操作就是存储和获取(动态注入DI)对象。在Spring中将这样的对象称为bean。只要一个对象需要多处使用,那么这个对象就是bean。

什么是IoC

    IoC: Inversion of Control(控制反转)。这是一种思想,控制权反转。

    这样的思想可以降低模块之间的耦合性。所谓耦合性就是代码之间的相关性,如果耦合太高,那么可能修改一处代码其他所依赖的代码都需要修改。降低耦合性,即代码之间的相关性也就降低了,模块和模块之间的区别也就更加明显了,开发效率也就提高了。

传统开发思想

    Car类依赖了Framework类,就在自己类中实例了这个对象。Framework类依赖了Bottom类,也在自己类中实例了这个对象。Bottom类中依赖了Tire类,也在自己类中实例了这个对象。Tire为最底层的类,如果这个类中的构造方法改变了,那么其他所依赖一连串的类都需要修改代码。

    如果当前类中依赖了其他类,就直接在自己类中实例这个对象了。那么就是自己控制着依赖对象的生命周期。所谓IoC思想就是控制反转,即我自己需要依赖这个对象的时候,不在自己类中实例这个对象了,自己不控制了。当我要使用这个依赖对象的时候,给别人说,让别人给我传递(注入)过来,即所依赖对象的生命周期不在是我自己控制了,交给别人控制(控制反转)

    这样的设计思想,就算所依赖的对象中代码进行了修改,也不会影响到当前类中的代码。当前类只需要得到依赖对象进行使用即可。

IoC开发思想

    明显可以看到当前类所依赖的对象不在是我自己实例化了,而是由别人传递过来(控制反转),我只需要使用即可。生命周期不在是我自己控制了,而是交给了别人。相比于传统开发思想,代码的耦合性就降低了。 

    这样的模式下,就算依赖对象代码修改了,也不会影响到当前类中的代码。当前类只需要关注所依赖对象的使用即可。

    IoC思想模式下依赖对象实例的顺序:Tire --> Bottom --> Framework --> Car。传统模式下依赖对象实例顺序:Car --> Framework --> Bottom --> Tire。明显也可以感受到控制权的反转。

Spring IoC

    Spring 是一个 IoC 容器,说的是对象的创建和销毁的权利都交给Spring来管理了,它本身又具备了存储对象和获取对象的能力。

    IoC控制权反转。当自己类中需要所依赖的类的时候,不在自己类中实例这个类了(自己不控制)。当我需要时,我给别人说,由别人将这个类的实例传递(注入)过来,我直接使用即可。这个时候所依赖类的实例生命周期不在是我自己掌控了,而是交给别人(控制权反转)。这样就可以降低代码之间的耦合性,所依赖的类就算改变也不会影响当前类中的代码。

    Spring容器中的对象默认只需要实例一次,以后使用的时候直接从Spring中获取就可以了。用完后在交给Spring容器。程序效率就得到了提升。

什么是DI

    DI: Dependency Injection。就是依赖注入的意思。IoC是一种思想(控制权反转),Spring IoC是一个容器,包含了存储和获取对象的能力。获取对象就是程序在运行期间,动态的将对象注入到当前类中。

    所谓依赖注入,就是当Spring IoC容器在运行期间,动态的将依赖关系注入到对象之中。IoC和依赖注入是从不同角度描述同一件事。当Spring IoC容器在运行的时候,使用DI技术动态的将目前所依赖的对象注入到当前要使用的位置上。实现对象之间的解耦。

    Spring IoC是一种思想,自己容器控制着对象。当其他类要使用Spring IoC容器中对象依赖的时候,使用DI动态的将这个对象注入到目标位置。         

    IoC 是“目标”也是⼀种思想,而目标和思想只是⼀种指导原则,最终还是要有可行的落地方案,而DI就属于具体的实现。

小结:

    Spring Ioc是一种思想,而DI是一种技术。使用Spring Ioc容器在程序运行期间动态的将对象注入到目标位置,这就是DI。

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

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

相关文章

YOLOv7+单目测距(python)

YOLOv7单目测距(python) 1. 相关配置2. 测距原理3. 相机标定3.1:标定方法13.2:标定方法2 4. 相机测距4.1 测距添加4.2 主代码 5. 实验效果 相关链接 1. YOLOV5 单目测距(python) 2. YOLOV5 双目测距&…

基于springboot的招聘信息管理系统源码数据库论文

目 录 1 绪 论 1.1 课题背景与意义 1.2 系统实现的功能 1.3 课题研究现状 2系统相关技术 2.1 Java语言介绍 2.2 B/S架构 2.3 MySQL 数据库介绍 2.4 MySQL环境配置 2.5 SpringBoot框架 3系统需求分析 3.1系统功能 3.2可行性研究 3.2.1 经济可行性 …

力扣sql中等篇练习(六)

力扣sql中等篇练习(六) 1 购买了产品A和产品B却没有购买产品C的顾客 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 先求出既有的,然后再去筛选掉没有的 # 去重用不了内连接 SELECT t1.customer_id,c.customer_name FROM ( SELECT distinct cust…

《Spring MVC》 第二章 第一个程序

前言 Spring MVC 是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架。 Spring MVC 本质是对 Servlet 的进一步封装,其最核心的组件是DispatcherServlet,它是 Spring MVC 的前端控制器,主要负责对请求和响应的统一地处理和分发。C…

C++ auto 内联函数 指针空值

本博客基于 上一篇博客的 序章,主要对 C 当中对C语言的缺陷 做的优化处理。 上一篇博客:C 命名空间 输入输出 缺省参数 引用 函数重载_chihiro1122的博客-CSDN博客 auto关键字 auto作为一个新的类型指示符来指示编译器,auto声明的变量必须由…

uni-app使用时遇到的坑

一.uni-app开发规范 1.微信小程序request请求需要https 小程序端: 在本地运行时,可以使用http 但是预览或者上传时,使用http无法请求 APP端: 一般APP可以使用http访问 高版本的APP可能需要用https访问 二. uni-app项目 配置App升…

Java语言请求示例,电商商品详情接口,接口封装

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C语言的形式和感觉,但它要比C语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。 使用Java编写的应用程序,既可以在一台…

如何更好的进行数据管理?10 条建议给到你

这个时代数据量的快速增长和数据复杂性的大幅度提高,让企业迫切的寻找更加智能的方式管理数据,从而有效提高 IT 效率。 管理数据库不是单一的目标,而是多个目标并行,如数据存储优化、效率、性能、安全。只有管理好数据从创建到删除…

newman结合jenkins实现自动化测试

一、背景 为了更好的保障产品质量和提升工作效率,使用自动化技术来执行测试用例。 二、技术实现 三、工具安装 3.1 安装newman npm install -g newman查看newman版本安装是否成功,打开命令行,输入newman -v,出现 版本信息即安…

浅述 国产仪器 6362D光谱分析仪

6362D光谱分析仪(简称:光谱仪)是一款高分辨、大动态高速高性能光谱分析仪,适用于600~1700nm光谱范围的DWDM、光放大器等光系统测试; LED、FP-LD、DFB-LD、光收发器等光有源器件测试;光纤、光纤光…

C语言基础应用(五)循环结构

引言 如果要求123…100,你会怎么求解呢? 如果按照常规代码 int main() {int sum 0;sum 1;sum 2;sum 3;...sum 100;printf("The value of sum is %d\n",sum);return 0; }就会特别麻烦,并且代码过于冗长。下面将引入循环的概念…

硬件知识的基础学习

GPIO、继电器、三极管、PWM、MOS管 的 输入与输出。 本人没有系统的学习过专业的硬件知识,只有在实践过程中向前辈简单的学习,若有问题,还请大佬指正。 目录 一、GPIO 1.1 输入与输出的区别 1.2 输入 1.2.1 电流流向和电阻区分上拉输入…

动力节点老杜Vue笔记——Vue程序初体验

目录 一、Vue程序初体验 1.1 下载并安装vue.js 1.2 第一个Vue程序 1.3 Vue的data配置项 1.4 Vue的template配置项 一、Vue程序初体验 可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的,对我们编写Vue程序起不到太大的作用,…

计算机网络 实验六

⭐计网实验专栏,欢迎订阅与关注! ★观前提示:本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 掌握以太网帧的格式及各字段的含义掌握IP包的组成格式及各字段的含义掌…

java中HashMap的使用

HashMap 键值对关系,值可以重复,可以实现多对一,可以查找重复元素 记录: 做算法遇到好多次了,就总结一下大概用法。 例如今天遇到的这个题: 寻找出现一次的数,那就使用哈希表来存储&#xf…

X射线吸收光谱知识点

1) 什么是XAS XAS是X-ray Absorbtion Spectra的缩写,全称为X射线吸收光谱。X射线透过样品后,其强度发生衰减且其衰减程度与材料结构、组成有关。这种研究透射强度I与入射X射线强度Io之间的关系,称为X射线吸收光谱;由于其透射光强与元素、原子…

express项目的创建

前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目。 安装node 在这里:https://nodejs.org/dist/v16…

《Linux0.11源码解读》理解(一)

计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根…

2023 减少人工标注,获取大量数据的能力

关键词: 零样本泛化能力模型 半监督 减少人工标注成本: 1、CVPR 2023 | 单阶段半监督目标检测SOTA:ARSL https://zhuanlan.zhihu.com/p/620076458 2、CVPR 2023 | 标注500类,检测7000类!清华大学等提出通用目标检测算…

Java版本工程行业管理系统源码-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…