目录

  • 一 Spring的基本信息
    • 1.1 Spring 概述
    • 1.2 架构
  • 二 环境搭建
    • 2.1 gradle的安装与配置
    • 2.2 Spring源码构建

本图:川西旅游中拍摄的(业余摄影)
官网:Home

一 Spring的基本信息

1.1 Spring 概述

Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架,Spring核心是IOC和AOP。
Spring主要优点包括:

  • 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
  • AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
  • 声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
  • 方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
  • 方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。

1.2 架构

整个spring框架按其所属功能可以划分为五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是为什么称Spring是一站式框架的原因。

核心模块(Core Container)

  • Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。
  • Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能,ApplicationContext是Context模块的核心接口。
  • 表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等,使用它可以很方便的通过表达式和Spring IoC容器进行交互。

AOP模块

  • Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架,通过AOP能降低耦合。

数据访问集成模块(Data Access/Integration )

  • 事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
  • JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
  • ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
  • OXM模块:提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
  • JMS模块:用于JMS(Java Messaging Service),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

Web模块

  • 该模块建立在ApplicationContext模块之上,提供了Web应用的功能,如文件上传、FreeMarker等,Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。

测试模块

  • Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。

二 环境搭建

参考文章:Spring 5.2.x 源码环境搭建(Windows 系统环境下)

2.1 gradle的安装与配置

➡️官方:Gradle | Releases
我这里下载的是5.6.4 :Gradle | Thank you for downloading Gradle!

  • 下载解压到指定目录

  • 配置环境变化

GRADLE_HOME:自己的安装目录

GRADLE_USER_HOME:仓库地址

%GRADLE_HOME%\bin

  • 验证

2.2 Spring源码构建

源码地址:https://github.com/spring-projects/spring-framework/tree/5.2.x

这里我们以5.2版本源码构建

  • 在编译过程中,Spring 会自动下载依赖包,默认使用的是官方镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到 build.gradle 文件中的 repositories
//添加阿里云镜像maven { url "http://maven.aliyun.com/nexus/content/groups/public" }


  • 点击gradlew.bat完成源码的初步构建

  • idea 配置,我这里是2022的,其余版本可能有不一样的

  • 给 Gradle 配置国内镜像


allprojects{repositories {def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'all { ArtifactRepository repo ->def url = repo.url.toString()if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'remove repo}}maven {url REPOSITORY_URL}}}
  • 进入Idea 进行依赖的下载,知道入下图才是源码构建成功


到了这我们基本的源码分析环境就搭建完毕了,下面我们来分析源码,从源码中吸收优秀的思想以及设计