Spring 源码学习-环境准备

简介: Hello,大家好,我是子悠,作为本周的小编之前已经跟大家介绍过自己了,这篇文章就让我们跟着JingQ 的步伐学习 Spring 源码的阅读吧,在正式开始之前,本篇先预热简单介绍一下环境准备。下面是正文

一起来准备阅读 Spring 源码

  • 代码环境准备
  • 设置 Gradle 路径
  • 下载依赖和编译
  • Spring 源码分析大致流程
  • 遇到的坑
  • 无法识别 Gradle 项目
  • gradle 版本和 Idea 版本不匹配
  • 参考资料

代码环境准备

  • JDK 8
  • Gradle
  • 编译工具(常用 IDEA)
  • 源码地址

下载源码到本地


$ git clone git@github.com:spring-projects/spring-framework.git

不建议下载 master 分支的代码,因为有些小问题一直在修复,所以我下载的是 v2.3.0.M2 版本的 releases 代码。

因为我也是一边看书,一边做笔记,下载了源码,写的 demo 代码和注释都在里面,小伙伴们可以下载我上传的代码,亲测可运行~

[码云 Gitee 地址](https://gitee.com/vip-augus/spring-analysis-note.git)

[Github 地址](https://github.com/Vip-Augus/spring-analysis-note)

设置 Gradle 路径

有两种选择:

  • 选择 IDEA 工具中默认(Recommend)
  • 选择用户自己下载的 Gradle (我本地通过 brew 下载)

最后设定:

86.jpg

下载依赖和编译

导入项目后,识别到 Gradle 依赖后,首先会从中央库下载相关的依赖。

下载完依赖后,进行代码编译,通过图形界面,选择根路径下的 build 任务。

87.jpg

最后编译生成 class 等文件路径,在各自模块的 build 目录。

Spring 源码分析大致流程

  • 介绍概念
  • 查看类的集成体系
  • 简单 demo
  • 查看源码
  • 分析流程

遇到的坑

无法识别 Gradle 项目

这个问题是通过 version controll 克隆代码后,打开新项目时一直提示

Could not resolve symbol "XXX" 
# 还有右上角弹出的 
Try resolve again

一开始不知道是哪个导入流程错误,通过查询资料,发现将代码 clone 到本地后,通过下面步骤操作,项目就能正常识别和下载依赖了:

  • 点击 IDEA 的 File -> Open,选择项目的 build.gradle
  • 按照提示设定 Gradle
  • 下载依赖和编译

gradle 版本和 Idea 版本不匹配

本地的 gradle 版本号是 5.4.1

$ gradle -v 
Welcome to Gradle 5.4.1! 

IDEA 工具的版本是 2018.2,查了资料,有可能是高版本 gradle 需要新版本 IDEA,于是我就去下载新版工具。(顺便安利一下新版本的主题 Dark Purple Theme)

89.jpg

更新 IDEA 后,在构建项目时,在最后一步卡住了,提示:


java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()Lorg/gradle/api/artifacts/ModuleIdentifier;

查看资料,大概是 gradle 升级后,出现了 jar 版本兼容的问题,于是按照提示,修改了编译方式(看上面 gradle 选择方式图片),修改完成后,能够正常构建项目。

参考资料

1. 解决IDEA在导入Gradle项目之后报Could not resolve symbol “XXX”错误

2. gradle版本引起编译报错问题:


Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getM

3. Gradle 5 IntelJ java.lang.AbstractMethodError


相关文章
|
4天前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
13 1
|
4天前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
8 0
|
3天前
|
消息中间件 安全 Java
学习认识Spring Boot Starter
在SpringBoot项目中,经常能够在pom文件中看到以spring-boot-starter-xx或xx-spring-boot-starter命名的一些依赖。例如:spring-boot-starter-web、spring-boot-starter-security、spring-boot-starter-data-jpa、mybatis-spring-boot-starter等等。
17 4
|
5天前
|
Java 数据库连接 Spring
Spring 整合 MyBatis 底层源码解析
Spring 整合 MyBatis 底层源码解析
|
7天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
22 5
|
6天前
|
Java Spring 容器
解读spring5源码中实例化单例bean的调用链
解读spring5源码中实例化单例bean的调用链
|
4天前
|
IDE Java 数据库连接
如何使用Spring Boot Profiles进行环境配置管理
如何使用Spring Boot Profiles进行环境配置管理
|
4天前
|
XML 安全 Java
Spring 基础知识学习
Spring 基础知识学习
|
4天前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
5 0
|
4天前
|
XML Java 数据库
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
6 0