【SpringFramework | 源码分析】环境搭建

前言

从本篇文章开始,我们将开始介绍spring-framework的整体架构以及源码分析环境搭建,俗话说磨刀不误砍柴工,一定要把本地环境搭建好才方便后续我们调试代码。

spring-framework架构

spring-frame目前已经更新到6.1.x,6.0以上的版本需要运行在JDK 17+的版本。而5.0的版本需要JDK8+的版本,并且对于JDK11也提供了JDK11的支持。spring-framework各版本的生命周期情况如下所示

image-20230520114227987

spring-framework总共大约有20多个模块构成,共计大约125万行代码,可以被分为下面几个模块

  • Core Container

Core Container模块包含Core、Beans、Context和Expression Language子模块。其中Core和Beans模块是框架的基础部分,它提供IOC和依赖注入特性。

子模块包名功能
Corespring-core主要包含Spring框架基本核心工具类,Spring的其他组件都要使用到这个包里的类,Core模块是其他组件的基础
Beansspring-beans所有引用都会用到的模块,它包含对配置文件的访问、创建和Bean的管理以及进行控制反转(IOC)和依赖注入(DI)操作相关的类
Contextspring-context它依赖Core和Beans提供的能力,但是它又提供了很多扩展功能包括国际化、事件传播、资源加载等
Expressionspring-expression提供了一个用于在运行时查询和操作对象的强大的表达式语言
  • Data Access/Integration

Data Access/Integration模块包含JDBC、ORM、OXM、JMS和Transaction子模块。

子模块包名功能
JDBCspring-jdbc提供了JDBC的分装,消除了冗长的JDBC编码和解析数据库厂商特有的编码错误代码
ORMspirng-orm为流行的对象-关系映射API,如JPA、JDO、Hibernate、Mybatis等
OXMspring-oxm提供了一个对Object/XML映射实现的抽象层,Object/XML映射实现包括JAXB、Castor、XMLBeans、JiBX和XStream
JMSspring-jmsJava Messaging Service模块,它主要包含了执照和消费消息的特性
Transactionsspring-tx事务模块,它支持编程和声明式的事务管理
  • Web

Web模块包含了WebSocket、WebMVC、Web和WebFlux子模块

子模块包名功能
WebSocketspring-websocket提供了对WebSocket的支持,WebSocket协议提供了一个标准化的客户端和服务器之间建立犬双攻双向通信的方法,通过TCP协议进行连接
WebMVCspring-mvc包含了Spring的model-view-contrller(MVC)的视线
Webspring-web提供了基本的面向Web的集成特性。例如多文件上传、使用servlet listeners初始化IOC容器以及一个面向Web应用的上下文
WebFluxspring-webflux提供了运行在非阻塞式服务器的基于响应式流(Reactive Streams)API的响应式堆栈(reactive-stack)应用,例如Netty,Undertow和Servlet容器
  • AOP

AOP模块提供了一个符合AOP标准的面向切面的编程实现,可以通过AOP订立方法拦截器和切点,将代码逻辑分开,降低他们之间的耦合性。它包含两个包spring-aopspring-aspects

image-20230520124759603

环境搭建

开发环境
  • Gradle
  • Jdk1.8+
  • Idea 2023.1
源码准备

建议大家使用gitee,支持国产,速度也快,体验相当好

打开gitee,右上角点击"从GitHub/GitLab导入仓库"

image-20230520092027174

选择从URL导入,然后复制Spring-Framework的地址Spring-Framework仓库地址,输入项目相关信息后点击导入,导入完成后就可以将代码clone到本地

image-20230520092228484

代码下载到本地之后,一定要切换到要分析的源码版本分支,本系列文章使用的分支是5.1.x

将项目工程导入主要分为如下步骤

  1. 打开Terminal,通过下面命令预编译spring-oxm

    ./gradlew :spring-oxm:compileTestJava
    

这个过程超级漫长,强烈建议不要在电脑旁边等待,容易怀疑人生,可以去睡个觉,醒来再看有没有编译好

如果看到下面的BUILD SUCCESSFUL就说明编译完成,可以使用Idea打开了,可以看到笔者用了23分7秒才编译完成

image-20230520090751659

  1. 将工程导入IntelliJ

使用Idea打开项目,选择build.gradle然后再打开即可

image-20230520085817979

运行示例代码

我们可以运行spring-framework中的单元测试来验证我们环境搭建是否正常,我们可以在spring-context项目中src/test/java/example中找一些单元测试,我们可以调试org.springframework.beans.factory.annotation.BridgeMethodAutowiringTests#SPR8434,其源码如下

image-20230520112252461

执行单元测试后没有报错,说明环境搭建正常

image-20230520112353075

Spring 官方也提供了将Spring工程导入Idea的文档可以参考《import-into-idea》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值