跳至主要內容

一、Spring概述

hahg大约 4 分钟

一、Spring概述

​ Spring 的主要作用就是为 代码 “ 解耦 ”,降低代码间的耦合度。根据功能的不同,可以将一个系统中的代码分为 主业务逻辑系统级业务逻辑 两类。

它们各自具有鲜明的特点:

  • 主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;
  • 系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。

​ Spring根据代码的功能特点,将降低耦合度的方式分为了两类:IoC 与 AOP。

  • IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即 不用再自己创建要使用的对象 了。而是由 Spring 容器统一管理,自动 “ 注入 ”。

  • 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务 “ 混杂 ” 到主业务逻辑中了,而是由 Spring 容器统一完成 “ 织入 ”。

Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。简单来说,Spring 是一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。

——百度百科《Spring》

1.1 Spring体系结构

​ Spring 由 20 多个模块组成,它们可以分为

  • 数据访问/集成(Data Access/Integration);
  • Web;
  • 面向切面编程(AOP, Aspects);
  • 应用服务器设备管理(Instrumentation);
  • 消息发送(Messaging);
  • 核心容器(Core Container);
  • 测试(Test)。

1.2 Spring 下载

下载地址:【 https://repo.spring.io/release/org/springframework/spring/ 】

1.3 Spring4的Jar包说明

​ 解压后文件的说明如下图:

s

​ 打开 libs 会发现有很多模块的 Jar 包,其中每个模块都有三类压缩包:

1.4 Spring的特点

1.4.1 非侵入式

​ 所谓非侵入式是指,Spring 框架的 API 不会在业务逻辑上出现,即业务逻辑是 POJO (Plain Old Java Object )。由于业务逻辑中没有 Spring 的 API,所以业务逻辑可以从 Spring 框架快速的移植到其他框架,即与环境无关。例如,在实现接口或继承父类时,不需要使用额外的 Jar 包,只需要使用 JDK 即可,这就是代码未被侵入。

1.4.2 容器

​ Spring 作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过 配置文件,来定义对象,以及设置与其他对象的依赖关系。

1.4.3 IoC

​ 控制反转(Inversion of Control),即创建被调用者的实例不是由调用者完成,而是由 Spring 容器完成,并注入调用者。当应用了 IoC,一个对象依赖的其它对象会通过 被动 的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它

​ 传统的开发方式就如同我们喝牛奶,在你想喝的时候需要主动地利用吸管将牛奶吸上来喝;而控制反转就如何去医院打针,只需要往椅子上一座,医生就会帮你注射药品,不需要自己动手。

1.4.4 AOP

​ 面向切面编程(AOP,Aspect Orient Programming),是一种编程思想,是面向对象编程 OOP 的补充。很多框架都实现了对AOP编程思想的实现。

​ Spring 也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已,它们并不负责其它的系统级关注点,例如日志或事务支持。

​ 我们可以把日志、安全、事务管理等服务理解成一个“ 切面 ”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好:

  1. 首先业务逻辑不纯净;
  2. 其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。

​ 那么 AOP 就是这些问题的解决方案,可以把这些服务剥离出来形成一个 “ 切面 ”,以期复用,然后将 “ 切面 ” 动态的 “ 织入 ” 到业务逻辑中,让业务逻辑能够享受到此 “ 切面 ” 的服务。切面就像书签,业务逻辑就像书本,切面的插入或拿走都不会影响业务逻辑的运行,而且可以反复使用,但我能利用书签来记录我每天看的时间和页数等数据,业务逻辑也可以利用系统级服务来计入一些日志等。