Spring基础框架结构
文章目录
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 小结
Spring概要
我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽ 庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级 的应⽤程序开发起来更简单。 ⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器。
⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器。
整体架构流程
什么是容器?
容器是⽤来容纳某种物品的(基本)装置。 ——来⾃:百度百科
我们想想,之前课程我们接触的容器有哪些?
List/Map -> 数据存储容器
Tomcat -> Web 容器
技术名词解释
Spring是一个容器,也是一个IoC容器
IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,所以呢Spring是一个控制反转的容器
技术细节
1.传统程序开发
像以前传统开发模式:
都是从上而下一一控制
public class NewCarExample {public static void main(String[] args) {Car car = new Car();car.init();}/*** 汽⻋对象*/static class Car {public void init() {// 依赖⻋身Framework framework = new Framework();framework.init();}}/*** ⻋身类*/static class Framework {public void init() {// 依赖底盘Bottom bottom = new Bottom();bottom.init();}}/*** 底盘类*/static class Bottom {public void init() {// 依赖轮胎Tire tire = new Tire();tire.init();}}/*** 轮胎类*/static class Tire {
// 尺⼨private int size = 30;public void init() {System.out.println("轮胎尺⼨:" + size);}}
}
但是随着对车的需求量越大,它代码本身所需要修改的地方就会越来越多,这 时候我们就需要加⼯多种尺⼨的轮胎,那这个时候就要对上⾯的程序进⾏修改了,修改后的代码如下所 示:
public class NewCarUpdateExample {public static void main(String[] args) {Car car = new Car(20);car.run();}/*** 汽⻋对象*/static class Car {private Framework framework;public Car(int size) {framework = new Framework(size);}public void run() {// 依赖⻋身framework.init();}}/*** ⻋身类*/static class Framework {private Bottom bottom;public Framework(int size) {bottom = new Bottom(size);}public void init() {// 依赖底盘bottom.init();}}/*** 底盘类*/static class Bottom {private Tire tire;public Bottom(int size) {tire = new Tire(size);}public void init() {// 依赖轮胎tire.init();}}/*** 轮胎类*/static class Tire {// 尺⼨private int size;public Tire(int size) {this.size = size;}public void init() {System.out.println("轮胎尺⼨:" + size);}}
}
当最底层代码改动之后,整个调⽤链上的所有代码都需要修改。所以为了修改这个缺陷,就需要利用Spring来进行“控制反转”!
2.控制反转式程序开发
把创造子类的方式,改成注入传递的方式,代码如下:
public class IocCarExample {public static void main(String[] args) {Tire tire = new Tire(20);Bottom bottom = new Bottom(tire);Framework framework = new Framework(bottom);Car car = new Car(framework);car.run();}static class Car {private Framework framework;public Car(Framework framework) {this.framework = framework;}public void run() {framework.init();}}static class Framework {private Bottom bottom;public Framework(Bottom bottom) {this.bottom = bottom;}public void init() {bottom.init();}}static class Bottom {private Tire tire;public Bottom(Tire tire) {this.tire = tire;}public void init() {tire.init();}}
static class Tire {private int size;public Tire(int size) {this.size = size;}public void init() {System.out.println("轮胎:" + size);}}
}
这样的反转后控制灵活且方便,运行图如下:
通⽤程序的实现代码,类的创建顺序是反的,传统代码是 Car 控制并创建了 Framework,Framework 创建并创建了 Bottom,依次往下,⽽改进之后的控制权发⽣的反转,不再是 上级对象创建并控制下级对象了,⽽是下级对象把注⼊将当前对象中,下级的控制权不再由上级类控制 了,这样即使下级类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的实 现思想。
1.3 理解 Spring IoC
所以对Spring IoC的定义就是:包含了多个工具方法的容器
学 Spring 最核⼼的功能,就是学如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程。
对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。
1.4 DI 概念说明
DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注 ⼊”的意思。
IoC和DI的关系就像一对CP一样:依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容 器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
⽐如说我今天⼼情⽐较好,吃⼀顿好的犒劳犒劳⾃⼰,那么“吃⼀顿好的”是思想和⽬标(是 IoC), 但最后我是吃海底捞还是杨国福?这就是具体的实现,就是 DI。
小结
主要讲述了Spring的核心内容,IoC容器是什么东西,DI是什么,DI和IoC的关系是什么,有什么区别。
Spring基础框架结构相关推荐
- [Spring 深度解析]第2章 Spring基础
第2章 ◄Spring基础► 在上一章节中,我们学习了Java的注解与反射,在这一章节我们将了解一下Spring框架,并学习Spring框架中重要的编程思想控制反转(IOC).面向切面编程(AOP ...
- Spring Quartz 框架结构概述(一)[转]
Spring Quartz 框架结构概述(一)[转] 标签:scheduler trigger jobdatamap 任务调度 quartz http://www.blogjava.ne ...
- Spring基础专题——第十一章(高级注解编程完结)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第七章(持久层整合)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第六章(Aop编程)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第五章(Aop代理)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第三章(反转控制与依赖注入)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第二章(注入Injection)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第一章(第一个Spring程序)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
最新文章
- boost::timer
- flutter_webview_plugin 无法加载网页的异常处理
- gj7 对象引用、可变性和垃圾回收
- 修改GitHub记录中的invalid-email-address
- deeplab ssd识别
- 如何给UI上可以接收focus事件的element动态注册onfocus处理函数
- 程序员和女教师相亲,晒出每月教师公积金,大家惊呼: 比我工资都高
- Xshell远程连接Linux服务器
- Tomcat-Server.xml配置图片路径
- 如何正确地将Blender模型导入进Unity3D
- 社区论坛小程序源码,功能齐全,简洁漂亮,前端+后端
- bp神经网络误差反向传播,bp神经网络结果不一样
- matlab四面体网格分割,分割球面
- Java - mian()
- 笔记本电脑开机后自带的键盘用不了,需要重启电脑才能用
- MATLAB三维图形绘制
- MGMT接口采集服务器IMM日志
- android布局空格以及首行缩进表示符
- Udemy上最好的JavaScript课程之一,强烈推荐新手入门学习
- 流氓软件与“强奸文化”
热门文章
- mysql中文拼音排序,实现方法
- android如何设置自动补,Android Studio 中设置代码块自动补齐
- 计算机审计工作底稿功能,计算机审计2.ppt
- 介绍 SMS over SGs
- 云原生容器技术之 Docker 常用命令
- substring方法截取字符串以及其他方式
- 等保2.0 安全计算环境-服务器-Linux(三级系统)
- 【技术贴】QQ2010更换自定义皮肤 QQ2010自定义皮肤下载 qq2010皮肤下载
- 无盘服务器内存64G够吗,电脑究竟要不要上64G内存,听听内行人怎么说,别再花冤枉钱了!...
- Python下openCV图像处理-图片展示、图片缩小