一、Spring概述
一、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包说明
解压后文件的说明如下图:

打开 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 也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已,它们并不负责其它的系统级关注点,例如日志或事务支持。
我们可以把日志、安全、事务管理等服务理解成一个“ 切面 ”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好:
- 首先业务逻辑不纯净;
- 其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。
那么 AOP 就是这些问题的解决方案,可以把这些服务剥离出来形成一个 “ 切面 ”,以期复用,然后将 “ 切面 ” 动态的 “ 织入 ” 到业务逻辑中,让业务逻辑能够享受到此 “ 切面 ” 的服务。切面就像书签,业务逻辑就像书本,切面的插入或拿走都不会影响业务逻辑的运行,而且可以反复使用,但我能利用书签来记录我每天看的时间和页数等数据,业务逻辑也可以利用系统级服务来计入一些日志等。