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




最后


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

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

相关文章
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2
|
3天前
|
监控 Java 应用服务中间件
Spring Boot整合Tomcat底层源码分析
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置和起步依赖等特性,大大简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是其与Tomcat的整合。
19 1
|
19天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
23天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
42 1
Spring 框架:Java 开发者的春天
|
9天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
35 9
|
15天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
15天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
65 1
|
23天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
19天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
28 1
|
20天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
25 1