文章目录

  • 概要
  • 整体架构流程
  • 技术名词解释
  • 技术细节
  • 小结

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基础框架结构相关推荐

  1. [Spring 深度解析]第2章 Spring基础

    第2章 ◄Spring基础► ​ 在上一章节中,我们学习了Java的注解与反射,在这一章节我们将了解一下Spring框架,并学习Spring框架中重要的编程思想控制反转(IOC).面向切面编程(AOP ...

  2. Spring Quartz 框架结构概述(一)[转]

    Spring Quartz 框架结构概述(一)[转]  标签:scheduler  trigger  jobdatamap  任务调度  quartz   http://www.blogjava.ne ...

  3. Spring基础专题——第十一章(高级注解编程完结)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  4. Spring基础专题——第七章(持久层整合)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  5. Spring基础专题——第六章(Aop编程)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  6. Spring基础专题——第五章(Aop代理)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  7. Spring基础专题——第三章(反转控制与依赖注入)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  8. Spring基础专题——第二章(注入Injection)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  9. Spring基础专题——第一章(第一个Spring程序)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

最新文章

  1. boost::timer
  2. flutter_webview_plugin 无法加载网页的异常处理
  3. gj7 对象引用、可变性和垃圾回收
  4. 修改GitHub记录中的invalid-email-address
  5. deeplab ssd识别
  6. 如何给UI上可以接收focus事件的element动态注册onfocus处理函数
  7. 程序员和女教师相亲,晒出每月教师公积金,大家惊呼: 比我工资都高
  8. Xshell远程连接Linux服务器
  9. Tomcat-Server.xml配置图片路径
  10. 如何正确地将Blender模型导入进Unity3D
  11. 社区论坛小程序源码,功能齐全,简洁漂亮,前端+后端
  12. bp神经网络误差反向传播,bp神经网络结果不一样
  13. matlab四面体网格分割,分割球面
  14. Java - mian()
  15. 笔记本电脑开机后自带的键盘用不了,需要重启电脑才能用
  16. MATLAB三维图形绘制
  17. MGMT接口采集服务器IMM日志
  18. android布局空格以及首行缩进表示符
  19. Udemy上最好的JavaScript课程之一,强烈推荐新手入门学习
  20. 流氓软件与“强奸文化”

热门文章

  1. mysql中文拼音排序,实现方法
  2. android如何设置自动补,Android Studio 中设置代码块自动补齐
  3. 计算机审计工作底稿功能,计算机审计2.ppt
  4. 介绍 SMS over SGs
  5. 云原生容器技术之 Docker 常用命令
  6. substring方法截取字符串以及其他方式
  7. 等保2.0 安全计算环境-服务器-Linux(三级系统)
  8. 【技术贴】QQ2010更换自定义皮肤 QQ2010自定义皮肤下载 qq2010皮肤下载
  9. 无盘服务器内存64G够吗,电脑究竟要不要上64G内存,听听内行人怎么说,别再花冤枉钱了!...
  10. Python下openCV图像处理-图片展示、图片缩小