Spring框架源码分析之Spring源码编译

简介: Spring框架源码分析之Spring源码编译

Spring 源码环境搭建


Spring 源码下载地址:https://github.com/spring-projects/spring-framework

Gradle 下载地址:https://gradle.org/releases/

查看 Spring 源码中使用的 Gradle 版本,打开下载好的 Spring 源码解压,然后进入到如下图所示的目录当中:


打开 gradle-wrapper.properties 查看 Gradle 版本:

查看了 Spring 中使用的 Gradle 版本之后然后到 https://services.gradle.org/distributions/ 下载对应的 Gradle 版本




配置 Gradle 环境变量


右键 → 我的电脑 → 属性:

新建一个系统变量:GRADLE_HOME,变量值为 Gradle 的安装位置如下图:


新建完毕之后,紧接着在编辑 PATH 系统变量,在当中添加一个变量值如下图:

%GRADLE_HOME%\bin




验证 Gradle


打开终端输入如下命令即可:

gradle -v





相关配置修改


修改 Gradle


找到如下目录:

修改如下内容,加快编译速度:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=file:///D:/Develop/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


查看 idea 的 kotlin 版本,查看方式:File → Setting → Plugins,没有安装过的,需要进行安装:




修改 build.gradle 配置


找到目标文件:build.gradle 在根目录下:


注释 Gradle 企业约束:




添加阿里镜像


在此文件中搜索关键字:repositories 搜索后,添加如下内容:

maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}





修改 settings.gradle 配置


找到目标文件:settings.gradle 在根目录下:

在 setting.gradle 中搜索关键字:pluginManagement 搜索后,添加如下内容:

maven { url "https://maven.aliyun.com/repository/public" }




修改 gradle.properties


找到目标文件:gradle.properties 在根目录下:

version=5.2.16.RELEASE
org.gradle.jvmargs=-Xmx2048M
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true




导入源码


依次点击 File → New → Project from Existing Sources,选择源码包路径下的 build.gradle 文件完成源码导入如下图:




idea 配置 gradle


依次点击:File → Setting → Build, Execution, Deployment → Build Tools → Gradle:

导入之后就等待&configure 成功即可🐤




Spring 预编译


先编译 spring-core 点击 idea 右边的侧边栏当中的 gradle 选择该模块,spring-core/Tashks/other/compileTestJava 如下图:


spring-core 编译了之后然后在按照我给了模块顺序依次全部编译一下,spring-oxmspring-contextspring-beans 编译了之后在 idea 当中按两下 Shift 搜索:ApplicationContext 查看 UML 图 ctrl + alt + shift + U 能够看到 UML 图,说明编译成功如下图:





构建自己的 spring-demo 工程


创建好了工程之后然后在依赖一个 spring-context 修改 Gradle 文件加入如下内容:

compile project(':spring-context')
testCompile group: 'junit', name: 'junit', version: '4.12'


紧接着创建几个类文件,还是以三层架构的方式进行分包最终的文件内容如下图所示:

UserService.java

/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:39
 * @description
 **/
public interface UserService {
   /**
    * 显示
    */
   void show();
}


UserServiceImpl.java

/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:40
 * @description
 **/
public class UserServiceImpl implements UserService {
   @Override
   public void show() {
      System.out.println("Hello Spring");
   }
}

SpringTest.java

/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:42
 * @description
 **/
public class SpringTest {
   public static void main(String[] args) {
      AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
      applicationContext.register(UserServiceImpl.class);
      applicationContext.refresh();
      UserService userService = applicationContext.getBean(UserService.class);
      userService.show();
   }
}

如上的内容创建完毕之后,然后直接运行即可效果如下图,出来了结果就代表已经编译成功了:





AspectJ 编译失败问题


如果遇到了可以按照我下方给出的步骤进行解决,AspectJ 下载地址:https://www.eclipse.org/aspectj/downloads.php 下载完毕之后找到下载的目录,使用 cmd 运行 jar 包命令如下:

java -jar xxx.jar


运行下载好的 AspectJ.jar 如下:

java -jar aspectj-1.9.6.jar

出现了如上界面之后一直下一步即可,第二个页面就是选择你所用的 JDK,其中有一个界面是说 aspectj 安装在那里,安装过程图我就不贴了,安装完毕了 AspectJ 之后然后在检查 idea 是否也安装了 AspectJ 插件如下图:

如上的内容都完毕了之后然后在进入到 Project Structure




最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
29天前
|
XML 安全 Java
|
2月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
51 0
|
8天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
3天前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
24 13
|
15天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
31 5
|
29天前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
56 14
|
25天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
55 8
|
27天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
46 2
|
2月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
73 6
|
2月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
35 0