【Spring5源码学习】Spring基础介绍及调试环境搭建

Spring 是一款用于简化企业级 Java 应用开发的分层开源框架,有着强大的扩展和融合能力,它善于整合各种单层框架并建立起完整的体系,能高效统一的构造可提供企业级服务的应用系统。

1、Spring 概述

Spring Framework 是一个分层非常清晰并且依赖关系、职责定位非常明确的轻量级架构,主要有以下八大模块:数据处理模块(Data Access/Integration)、Web 模块、AOP(Aspect Oriented Programming)模块、Aspects 模块、Instrumentation 模块、Messaging 模块、Core Container 模块和 Test 模块。

正是依靠着这些基本模块,Spring 实现了一个融合了现有解决方案的零侵入的轻量级框架,如图所示:

1.1 八大模块

接下来,对八大模块进行必要的简要说明:

1、数据处理模块(Data Access/Integration):由 JDBC、ORM、OXM、JMS 和 Transactions 等模块组成。

  •  JDBC 模块:消除编写冗长的JDBC代码和解析数据库厂商特有的错误代码,它提供了Spring对JDBC数据访问进行封装的所有类;
  • ORM 模块:提供了流行的 Object-Relational Mapping(对象-关系映射)API 集成层,包含JPA、JDO 和 Hibernate 等 ORM 框架。

Spring 对 ORM 的支持和封装主要体现在3个方面:①. 一致的异常处理体系结构,对第三方 ORM 框架抛出的专有异常进行了包装;②. 一致的DAO抽象的支持,为每个框架都提供了模板类来简化和封装常用操作,比如 JdbcSupport、HibernateTemplate;③. Spring 的事务管理机制,为所有数据访问都提供了一致的事务管理。

  • OXM 模块:提供抽象层,用于支持 Object/XML mapping(对象/XML映射)的实现,例如JAXB、Castor、XMLBeans、JiBX 和 XStream 等;
  • JMS 模块:即 Java Messaging Service,包含生产和消费信息的功能;
  • Transactions 模块:支持编程和声明式事务管理。

2、Web 模块:由 Web、WebSocket、Servlet 和 Portlet 等模块组成。

  • Web 模块:提供了面向 Web 开发的集成功能;
  • WebSocket 模块:提供了面向 WebSocket 开发的集成功能。
  • Servlet 模块(或 SpringMVC 模块):包含 Spring 的 Model-View-Controller 和 REST Web Services 实现的 Web 应用程序。Spring MVC 框架使 Domain Model(领域模型)代码和 Web Form(网页)代码实现了完全分离,并且集成支持了 Spring Framework 的所有功能。
  • Portlet 模块(或 Portlet MVC 模块):是基于 Web 和 Servlet 模块的 MVC 实现的。

Portlet 和 Servlet 的最大区别是对请求的处理分为 Action 阶段和 Render 阶段。在处理一次  HTTP 请求时,在 Action 阶段处理业务逻辑响应并且当前逻辑处理只被执行一次;而在 Render 阶段随着业务的定制,当前处理逻辑会被执行多次,这样就保证了业务系统在处理同一个业务逻辑时能够进行定制性响应页面模版渲染。

3、AOP(Aspect Oriented Programming)模块:是 Spring 的代理模块,属于 Spring 的核心模块,它巧妙地利用了 JVM 动态代理和 CGLIB 动态代理面向过程编程,实现了业务零侵入、低耦合的效果。

为了确保 Spring 与其他 AOP 框架的互用性,Spring AOP 模块支持基于 AOP 联盟定义的 API,也就是 Aspect 模块,与 Spring IoC 模块相辅相成。其中,我们熟知且常用的事务管理就是利用 Spring AOP 模块实现的。Spring AOP 模块及 Spring 良好的架构设计及扩展性,使 Spring 可以融合基本上所有的模块及其他框架,成为真正的集大成者。

4、Aspects 模块:提供了与 AspectJ(一个成熟的功能强大的面向切面编程的框架)的集成,Aspects 扩展了 Java 语言,定义了 AOP 语法(织入点语法),持有一个专门的编译器来生成遵守 Java 字节编码规范的 Class 文件,使用字节码生成技术来实现代理。

5、Instrumentation 模块:是 Spring 对其他容器的集成及对类加载器的扩展实现,其子模块  spring-instrument-tomcat 实现了 Tomcat Instrumentation 代理功能。

6、Messaging 模块:是从 Spring 集成项目(比如 Message、MessageChannel、MessageHandler 及其他基于消息应用的基础模块)中抽象出来的,类似于基于注解的 Spring MVC 编程模块,包含一系列消息与方法的映射注解。

7、Core Container 模块(Spring 核心容器模块):它是 Spring 的基石,由 Core、Beans、Context、SpEL 四个子模块组成。

  • Core 模块和 Beans 模块:提供了框架的基础部分,包含 IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)功能,使用 BeanFactory 基本概念来实现容器对 Bean 的管理,是所有 Spring 应用的核心。Spring本 身的运行都是由这种 Bean 的核心模型进行加载和执行的,是 Spring 其他模块的核心支撑,也是运行的根本保证。
  • Context 模块(包含 Spring-Context 和 Spring-Context-Support 两个子模块):该模块是建立在 Core 模块和 Beans 模块的坚实基础之上,并且集成了 Beans 模块的特征,增加了对国际化的支持,也支持 Java EE 特征。ApplicationContext 接口是 Context 模块的重点和焦点。Spring-Context-Support 模块支持集成第三方常用库到 Spring 应用上下文中,例如缓存(EhCache、Guava)、调度 Scheduling 框架(CommonJ、Quartz)及模板引擎(FreeMarker、Velocity)。
  • SpEL 模块:即 Spring-Expression Language,提供了强大的表达式语言来查询和操作运行时的对象。

8、Test 模块:支持通过组合 JUnit 或 TestNG 来进行单元测试和集成测试,并且提供了 Mock Object(模仿对象)方式进行测试。

1.2 三种领域模型

Spring 的领域模型有三种,即容器领域模型、核心领域模型以及核心领域模型,下面也做下简要的说明。

  • 容器领域模型(Context 模型,或上下文模型):对 Spring 核心领域模型进行生命周期管理。
  • 核心领域模型(Bean 模型):体现 Spring 的一个重要核心理念,即一切皆 Bean,Bean 即一切。Bean 是应用运行时可执行的最小函数式(属性)单元,也可以是 Java 中的一个函数对象,更倾向于一种对象式的为某种特殊行为而生的可复用的概念,不受职责或者大小的限制。

Bean 模型是 Spring 的核心服务实体域,是应用要操作的本身,是每个线程的真正执行者,也是整个会话生命周期的管理者,还是 Spring 对外暴露的核心实体。

  • 代理领域模型(Advisor 模型):Spring 代理的执行依赖于 Bean 模型,但是 Spring 代理的生成、执行、选择都依赖于 Spring 自身定义的 Advisor 模型,只有符合 Advisor 模型的定义,才能生成 Spring 代理。

2、搭建调试环境

2.1 下载 Spring 源码

Spring5 源码可从 github 获取,可以使用 HTTPS、SSH、github 脚手架、或直接下载 zip 压缩文件,按需选择下载方式,如下图所示:

拉取完 spring-framework-5.1.x 工程后,整体结构如下:

我们找到 gradlew.bat 脚本,通过 CMD 窗口去执行它。执行完成后,会出现 build success 提示语,说明工程构建成功,如下所示:

接下来,在 spring-framework-5.1.x 工程的 gradle/wrapper/ 目录下,找到 gradle-wrapper.properties 文件,打开看下构建 Spring 源码对应的 gradle 版本:

然后,就去下载 gradle-4.10.3-bin.zip,使用这个 gradle 版本构建和编译 Spring 源码。

2.2 构建工具--Gradle

这里,使用从 Gradle 官网链接下载 gradle4.10.3,下载 binary-only 即可,并解压到指定目录。

接着,配置 Windows 环境变量--系统变量--编辑环境变量,如图所示:

保存并退出,然后 CMD 验证,使用 gradle -v 命令 ,如下:

安装成功后,gradle构建工具就准备完毕,接下来去下载 Spring5 源码了。

2.3 导入 Spring 源码到 IDEA

第一步,选择需要导入的源码:

第二步,导入选择Gradle构建工具:

这一步,会初步将源码导入到 IDEA 中,并通过 Gradle 会下载必需的 jar 包,如下图所示:

第三步,file -- settings...,设置 Gradle 选项:

2.3 预编译 spring-oxm 模块

在根目录的 import-into-idea.md 文件中有相关的 Spring 源码导入 IDEA 的步骤说明,第一步就是要预编译 spring-oxm 模块。

此时,我已经将 Spring 源码导入了 IDEA,不过没关系,通过 IDEA 右侧的 Gradle 工具,找到 spring-oxm 模块的 Tasks/other/路径下的 compileTestJava ,双击进行编译:

当控制台出现 BUILD SUCCESSFUL in ... 时,说明编译成功了,至此 Spring5 源码导入和编译就完成了。

搭建完成调试环境后,接下来就可以愉快的源码调试和学习了。

猜你喜欢

转载自blog.csdn.net/qq_29119581/article/details/128743798
今日推荐