参考源

https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click

https://www.bilibili.com/video/BV12Z4y197MU?spm_id_from=333.999.0.0

《Spring源码深度解析(第2版)》

版本

本文章基于 Spring 5.3.15


环境信息

  • JDK 17.0.2
  • Gradle 7.4
  • IntelliJ IDEA 2021.3.2

获取项目

GitHub 搜索

访问 GitHub 官网:https://github.com/

输入 spring

选择 spring-projects / spring-framework

Spring 官网跳转

访问 Spring 官网:https://spring.io/

点击 Spring Framework

点击 GitHub 图标

代码下载

同步到 Gitee

由于 GitHub 网络限制,可以先导入到 Gitee 后再从 Gitee 克隆项目。

导入 Gitee 后,可以选择同步源项目获取最新的项目代码

此操作会覆盖当前代码,导致写的注释和测试类消失,非必要情况建议不同步

下载压缩包

由于 GitHub 网络限制,直接通过地址克隆会非常缓慢,可以下载压缩包。

编译项目

克隆 Gitee 项目或者打开解压后的压缩包可以加载项目

JDK 版本

该版本 Spring 要求的最低 JDK 版本为 8,适配的最高 JDK 版本为 17

建议使用 JDK 17 构建,可以避免一些兼容性问题。

需要在这些位置设置统一的 JDK 版本

Gradle 版本

该项目使用 Gradle,建议本地版本大于等于项目使用的版本。

如果本地版本小于项目使用的版本,会自动去下载匹配的版本,这样不方便配置国内镜像库,构建会非常缓慢。

查看项目匹配的 Gradle 版本

配置 Gradle

问题处理

Aspect 报错

描述

构建整个项目时报如下错误:

java: 找不到符号

符号: 类 AnnotationCacheAspect

位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration

原因

AnnotationCacheAspect.aj 不是 Java 文件,javac 编译时识别不了,需要另外的aspectj 进行处理。

解决

更改 Gradle 配置

使用 Gradle 构建和运行

Gradle 中集成了 AspectJ 编译插件,使用 Gradle 可以编译通过。

Reload 项目

再次构建就不会报 Aspect 错误了。

缺点

该方法可以很方便的解决 Aspect 报错问题,但由于 Gradle 的编译和运行速度都比 IDEA 慢,会导致运行项目比较缓慢,影响效率。

使用 AspectJ 编译

下载 AspectJ

  1. 访问:https://www.eclipse.org/aspectj/downloads.php

  2. 点击下载 AspectJ 的 jar 包。

  1. 选择国内镜像,下载会快很多。

安装 AspectJ

  1. 在 AspectJ 的 jar 包所在目录打开命令行,运行 java -jar aspectj-1.9.6.jar 命令,会弹出 AspectJ 的安装界面,点击下一步。

  1. 选择 JDK 的安装路径,点击下一步。

  1. 接着选择 AspectJ 的安装路径,点击安装。

IDEA 配置 AspectJ

  1. 安装 AspectJ 插件

  1. 将编译器改为 Ajc,接着设置 AspectJ 的安装路径,选择 aspectjtools.jar

  2. 一定要将 Delegate to Javac 选项打勾。

勾选这个代理设置则只对指定的项目进行 Ajc 编译,其他的项目还是用默认的 Javac 编译。

如果不勾选,则全部项目都使用 Ajc 编译,可能会导致编译错误。

指定需要使用 Ajc 编译的项目

上面设置了只对指定的项目进行 Ajc 编译,这里就需要指定对应项目。

  1. 选择 spring.spring-aop.main

  1. 选择 spring.spring-aspects.main

指定 Ajc 编译项目的 JDK 版本

  1. 查看 Ajc 编译支持的 JDK 版本

  1. 添加 spring.spring-aop.mainspring.spring-aspects.main 并选择指定 JDK 版本

再次构建

再次构建就不会报 Aspect 错误了。

测试类报错

Spring 项目中有些测试类可能会出现一些错误,删除即可,不会影响编译和功能。

项目结构

主要模块

  • spring-core:核心模块,依赖注入 DI 的最基本实现。
  • spring-beans:Bean 工厂与装配。
  • spring-context:上下文,即 IOC 容器。
  • spring-context-support:对 IOC 的扩展。
  • spring-context-indexer:类管理组件和 Classpath 扫描。
  • spring-expression:表达式语句。

切面编程

  • spring-aop:面向切面编程。
  • spring-aspects:集成 AspectJ。
  • spring-instrument:动态 Class Loading 模块。

数据访问与集成

  • spring-jdbc:提供 JDBC 主要实现模块,用于简化 JDBC 操作。
  • spring-tx:spring-jdbc 事务管理。
  • spring-orm:主要集成 Hibernate,JPA,JDO 等。
  • spring-oxm:将 Java 对象映射成 XML 数据或将 XML 映射为 Java 对象。
  • spring-jms:发送和接受消息。

WEB 组件

  • spring-web:提供了最基础的 WEB 支持,主要建立在核心容器上。
  • spring-webmvc:实现了 spring mvc 的 WEB 应用。
  • spring-websocket:主要与前端页的全双工通讯协议。
  • spring-webflux:一个新的非阻塞函数式 Reactive Web 框架。

报文

  • spring-messaging:4.0 加入的模块,主要集成基础报文传送应用。

测试

  • spring-test:测试组件。

集成兼容

  • framework-bom:解决不同模块依赖版本不同问题。

我的项目

Gitee 地址:https://gitee.com/liao-hang/spring-framework.git

Spring源码 02 项目搭建的更多相关文章

  1. Spring源码阅读环境搭建

    目录 安装gradle 导入Spring源码 创建测试模块my-test 其他问题 spring-aspects模块构建时报错 本文思维导图 本文将粗略的搭建一个Spring源码的阅读环境,为后面的源 ...

  2. spring源码开发环境搭建

    下载spring源码 地址 https://github.com/spring-projects/spring-framework 可以下载release版本,也可以直接git clone当前开发版本 ...

  3. Spring源码 之环境搭建

    1.安装gitHub 在官网https://desktop.github.com/下载githubsetup.exe,在线安装总是出错,试了几次后不成功就放弃了.不知道是不是网络的原因. 后来在网上找 ...

  4. Java之美[从菜鸟到高手演变]之Spring源码学习 - 环境搭建

    准备工作 1.下载安装STS(Spring Tool Suite),在eclipse market里直接搜索.下载.安装.2.下载安装gradle, Spring源码使用gradle构建,下载后解压到 ...

  5. Spring源码阅读 之 搭建源码阅读环境(IDEA)

    检出源码: GitHub:https://github.com/spring-projects/spring-framework.git 可以按如下步骤:(须确保Git已正确安装) Git正确安装后, ...

  6. 【一步一步】Spring 源码环境搭建

    平时项目中基本上都会用到spring,但是源码还没有深入的了解过.趁这段时间稍微空闲点,开始研究下spring 源码.下面是spring 源码的环境搭建. 主要分为如下步骤: ①安装jdk,gradl ...

  7. Spring源码分析——源码分析环境搭建

    1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...

  8. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  9. Spring 源码阅读环境的搭建

    前言 本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!​当前版本:5.3.2-SNAPSHOT. 环境准备 Git JDK master 分支需要 JDK 11 5.2.x 分支, J ...

随机推荐

  1. OI中组合数学公式和定理90%歼灭

    组合数学 基础概念 加法和乘法原理 加法原理 同一步下的不同选择,可以通过累加得到方案数. 乘法原理 整个流程的方案数可以由每一步的方案数相乘得到. 有了加法原理和乘法原理,就可以解决一些没有选择导致 ...

  2. 《Unix 网络编程》15:Unix 域协议

    Unix 域协议 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 本 ...

  3. Spring Security整合企业微信的扫码登录,企微的API震惊到我了

    本文代码: https://gitee.com/felord/spring-security-oauth2-tutorial/tree/wwopen/ 现在很多企业都接入了企业微信,作为私域社群工具, ...

  4. C语言学习之我见-strncmp()字符串比较函数(控制范围)

    strncmp()函数,用于范围内,两个字符串的比较,n表示最大比较范围. (1)函数原型 int strncmp(const char *_Str1,const char *_Str2,size_t ...

  5. kubernetes code-generator使用

    目录 Overview Prerequisites CRD code-generator 编写代码模板 code-generator Tag说明 开始填写文件内容 type.go doc.go reg ...

  6. SAP APO-供应链监控

    供应链监控(SCM)是一种有效的工具,可以为供应商和购买者做出明智的决策. 供应链流程中的关键人物基于供应链监控做出决策. 供应链包括两个工具- 库存需求清单MD04 物流信息系统(LIS) 事务MD ...

  7. 面试突击60:什么情况会导致 MySQL 索引失效?

    为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景. explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字 ...

  8. LVGL库入门教程 - 动画

    动画可以说是 LVGL 中的特色之一,不过在使用动画前,请确保单片机具有足够的性能来维持足够的帧率. transition:过渡动画 当一个控件的状态发生改变时,可以让样式也发生变化以提醒用户.通过过 ...

  9. 使用net core 6 c# 的 NPOI 包,读取excel..xlsx单元格内的图片,并存储到指定服务器

    这个是记录,单元格的图片. 直接上代码,直接新建一个 net core api 解决方案,引用一下nuget包.本地创建一个 .xlsx 格式的excel文件 using ICSharpCode.Sh ...

  10. PTA(BasicLevel)-1014 福尔摩斯的约会

    一.问题描述 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明 ...