Spring核心与设计思想

news/2024/11/22 20:13:10/

日升时奋斗,日落时自省 

目录

1、Spring概念

1.1、容器

1.2、IoC

1.2.1、IoC对比传统程序

1.2.2、举例说明

1.2.3、总结

2、DI概念理解


1、Spring概念

如果学java我们通常说的Spring就是指是Spring Framework(Spring框架),是一个开源框架,有众多佬维系着,Spring支持应用广泛,让开发更加简单

概念理解  Spring:Spring是包含了众多工具方法的IoC容器

首先先确定一个概念:IoC是一种思想,不是一个工具,而Spring正式用于IoC思想

注:重点在于容器和IoC的理解

1.1、容器

容器其实是就是我们日常理解的概念,能承载一些东西,例如:杯子可以承载水;杯子就是一个容器

此处的容器只不过承载的是代码了

我们之前也学过容器:

<1>List/Map   : 数据存储容器

<2>Tomcat     : Web容器(存储Web项目)

1.2、IoC

Spring就是一个容器,但是这个容器具有IoC思想的容器(IoC容器)

IoC全称:Inversion of Control 翻译成中文是“控制反转”的意思,也就是说Spring是一个“控制反转”容器;

IoC思想怎么理解:“控制反转”:重点反转

1.2.1、IoC对比传统程序

<1>传统情况下:

当前有个 A -->B -->C  表示A控制B --> B控制C 这就是一个日常的操作

缺陷:如果C出现问题,就会导致 B出现问题,B出现问题,就会导致A出现问题(连锁问题)

我们代码也是如此:上层控制下层,耦合性很高,会给编写代码的人员带来后期维护的大难题,改动下层的一个代码,上层代码同样也要修改(所有点与点之间的联系都是依赖关系,被动关系)

<2>IoC情况下:

还是以A -->B -->C为例,IoC思想就是反转当前状态,A原来是掌控B的,但是现在让A只加载B,让其他人来操作B的使用,这样A在B修改时就会受到B的影响;C也同样让B只加载C,让其他人来操作C的使用,B在C修改的同时也不会影响到B;

上下层之间就降低了耦合性,如果我要修改C不会影响B,更不会影响A

1.2.2、举例说明

以一辆车的构架说明IoC思想的优势:

传统情况下:

一辆车(Car)需要车身(Framework)来维系,车身需要底盘(Bottom)来维系,底盘需要车轮(Tire)(直属于依赖关系)

注:英文标注表示下面代码的类名

 传统情况的缺陷:当底层代码改动之后,整个调用链上的代码都需要修改

附代码(依赖关系):

Car类的代码:

public class Car {private  FrameWork frameWork;public Car(int size){frameWork=new FrameWork(size);}public void init(){System.out.println("do car");frameWork.init();}public static void main(String[] args) {Car car=new Car(2);car.init();}
}

 Framework类的代码:

public class FrameWork {private Bottom bottom;public FrameWork(int size){bottom=new Bottom(size);}public void init(){System.out.println("do framework");bottom.init();}
}

Bottom类的代码:

public class Bottom {private Tire tire;public Bottom(int size){tire=new Tire(size);}public void init(){System.out.println("do bottom");tire.init();}
}

Tire类的代码:

public class Tire {private int size=17;public Tire(int size){this.size=size;}public void init(){System.out.println("size -> "+size);}
}

IoC思想:

 附代码:

Car类代码:

public class Car {private FrameWork frameWork;public Car(FrameWork frameWork){this.frameWork=frameWork;}public void init(){System.out.println("do car...");frameWork.init();}
}

 Framework类代码:

public class FrameWork {private Bottom bottom;public FrameWork(Bottom bottom){this.bottom=bottom;}public void init(){System.out.println("do FrameWork...");bottom.init();}
}

Bottom类代码:

public class Bottom {private Tire tire;public Bottom(Tire trie){this.tire=trie;}public void init(){System.out.println("do Bottom...");tire.init();}
}

Trie类代码:

public class Tire {private int size=12;public Tire(int size){this.size=size;}public void init(){System.out.println("size -> "+size);}
}

Test测试类:

public class Test {//IoC是一种思想,不是一种插件,在很多地方都可以表现出来,主要是为了解耦性//降低代码的连接性,防止改一个代码而出现一连串的错误//IoC也叫做控制反转public static void main(String[] args) {Tire tire=new Tire(12);Bottom bottom =new Bottom(tire);FrameWork frameWork=new FrameWork(bottom);Car car=new Car(frameWork);car.init();}
}

1.2.3、总结

Spring是包含了多个工具方法的IoC容器,一个IoC(控制反转)容器,具备两点功能

<1>将对象存入容器中;

<2>从容器中取出对象;

Spring的核心功能,就是将对象存入到Spring中,再从Spring中获取对象的过程,对象的创建和销毁的权利都交给Spring来管理了,Spring本身又具备了存储对象和获取对象的能力

Spring优势:将对象存储在IoC容器相当于将以后可能用的所有工具制作好都放到仓库中,需要的时候直接取就行了,用完再把它放回到仓库,new对象的方式相当于,每次需要工具了,才现做,用完也不会保存,下次再调用的时候需要再new,,这就是IoC容器和普通程序开发的区别

2、DI概念理解

提到IoC就会提及到DI,DI是Dependency Injection的缩写,翻译过来就是“依赖注入”

所谓以来依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象中,依赖注入(DI)和控制反转(IoC)是从不同的角度的描述同一件事情,无非通过引入IoC容器,利用依赖注入的方式,实现对象之间的解耦

区别:

<1>IoC是一种思想,只是一种指导原则

<2>DI就是一种具体的实行方案


http://www.ppmy.cn/news/39935.html

相关文章

webgl-图形非矩阵旋转

知识拓展 由&#xff08;x1,y1&#xff09;旋转β角度到&#xff08;x2,y2&#xff09; 根据圆极坐标方程 x1 r*cosα y1 r*sinα 可得 x2 r*cos(α β) r*cosα*cosβ - r*sinα*sinβ,因为x1 r*cosα&#xff0c;y1 r*sinα&#xff0c;所以x2 x1*cosβ -y1*sinβ…

数据在内存中的存储(深度剖析)

目录 1.数据类型介绍 1.1类型分类 2.整形在内存中的存储 2.1原码&#xff0c;反码&#xff0c;补码 2.2大小端介绍 2.3练习 3.浮点型在内存中的存储 3.1浮点数存储规则 引入&#xff1a; 有正负的数据可以存放在有符号的变量中 只有正数的数据可以存放在无符号的变量…

java设计模式(2)单例模式、工厂模式、建造者模式

单例模式 单例对象的类必须保证只有一个实例存在 饿汉式单例 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用&#xff0c;以后不再改变&#xff0c;所以天生是线程安全的 //饿汉式单例类. public class Singleton {//构造器私有化private Singleton() {}//stat…

五子棋透明棋盘界面设计(C语言)

五子棋透明棋盘设计&#xff0c;漂亮的界面制作。程序设置双人对奕&#xff0c;人机模式&#xff0c;对战演示三种模式。设置悔棋&#xff0c;记录功能&#xff0c;有禁手设置。另有复盘功能设置。 本文主要介绍透明的玻璃板那样的五子棋棋盘的制作。作为界面设计&#xff0c;…

Kriging 克里金算法Java实现

引入依赖库 import java.util.ArrayList; import java.util.Arrays; import java.util.List;定义一个类来表示二维坐标点 class Point {double x;double y;double z;Point(double x, double y, double z) {this.x x;this.y y;this.z z;}double distance(Point other) {doubl…

Java基础-单元测试和反射的相关内容

系列文章目录 JavaSE基础的单元测试和反射相关内容的学习 文章目录系列文章目录前言一、单元测试1.单元测试概述2.单元测试快速入门3.单元测试常用注解二、反射1.反射概述2.反射获取类对象3.反射获取构造器对象4.反射获取成员变量对象5.反射获取方法对象6.反射的作用—泛型擦除…

利用docker搭建云渗透测试靶场

文章目录 前言Docker的安装1、Linux内核版本查看2、更新apt源满足下载要求3、进行系统或工具的更新4、采用apt安装Docker云靶场腾讯云 COS Bucket 公开访问场景场景搭建部署靶场销毁环境前言 Docker是渗透测试中必学不可的一个容器工具,在其中,我们能够快速创建、运行、测试以…

Jmeter接口测试和性能测试

目前最新版本发展到5.0版本&#xff0c;需要Java7以上版本环境&#xff0c;下载解压目录后&#xff0c;进入\apache-jmeter-5.0\bin\&#xff0c;双击ApacheJMeter.jar文件启动JMemter。 1、创建测试任务 添加线程组&#xff0c;右击测试计划&#xff0c;在快捷菜单单击添加-…