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的关系是什么,有什么区别。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值