在IDEA中搭建Spring5.2.x版本源码(~附带完整过程和图示~)

news2024/12/23 6:06:11

1.开发环境


  • JDK8
  • IntelliJ IDEA 2019.1.4
  • gradle 5.6.4
  • git 2.33.0

2.操作步骤


下载并安装git


  • 进入https://git-scm.com/downloads,下载对应操作系统的git版本
  • 一直点击next安装即可
  • 记得配置环境变量

获取Spring源码


  • 使用clone的方式将源码拉取到本地,方便使用IDEA直接比较版本间的差异

    • 新建一个文件夹SpringFrameWork
    • 在该文件夹下打开git bash,输入以下命令:
    git clone https://github.com/spring-projects/spring-framework.git
    
    • 完成克隆后,在命令行输入:
     git checkout origin/5.2.x
    
  • 也可直接下载源码的压缩包

    • 进入https://github.com/spring-projects/spring-framework,并选择其中一个版本

    在这里插入图片描述

    • 点击code中的Download ZIP

添加阿里云镜像


  • 找到源码目录下的build.gradle文件

在这里插入图片描述

  • 向文件中的repositories节点下添加以下镜像:
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

预编译spring-oxm模块


  • 在源码目录下下打开cmd命令窗口
  • 执行以下命令:
gradlew :spring-oxm:compileTestJava
  • 完成spring-oxm模块的编译后,会在源码目录生成.gradle文件夹

在这里插入图片描述

下载并安装gradle


  • .gradle文件夹可以查看到需要下载的版本,进入https://gradle.org/releases/,下载需要的版本

在这里插入图片描述

  • 记得配置环境变量:

    • 新增 GRADLE_HOME 环境变量,指向gradle-5.6.4-bin.zip解压目录
    • 在Path环境变量新增 %GRADLE_HOME%\bin
  • 在cmd中输入以下命令gradle -v检查是否安装成功

为Gradle配置镜像


  • 进入gradle-5.6.4-bin.zip解压后的目录,在init.d目录下新建init.gradle文件
  • 添加以下内容:
allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            def url = repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
                project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
                remove repo
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

将代码导入到IDEA中


  • 选择IDEA的Import Project

  • 选择导入Gradle项目(先确保在IDEA中已经开启Gradle插件,要不然下图不会显示Gradle)

在这里插入图片描述

  • 在导入前进行配置

在这里插入图片描述

  • 点击Finish,等待IDEA构建完项目

  • 将分支切换到5.2.x

在这里插入图片描述

构建整个项目


  • 在IDEA中选择Build->Build Project(本机在构建过程很顺利,但是在测试时还是报了关于AspectJ的错误,所以还是要进行下面的步骤)

在这里插入图片描述

  • 下载并安装aspectj

    • aspectj-1.9.5.jar所在的文件夹打开cmd命令行,运行java -jar aspectj-1.9.4.jar
    • 在安装界面中点击Next(注意自定义aspectj-1.9.5.jar安装的路径并选择JDK所在的路径)
  • IDEA中配置aspectj

    • 确保插件Spring AOP/@AspectJAspectJ Support已被激活

    在这里插入图片描述

    • 将编译器改为Ajc

    在这里插入图片描述

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

      在这里插入图片描述

      在这里插入图片描述

  • 再次选择Build->Build Project

3.测试


创建模块


在这里插入图片描述

在这里插入图片描述

添加必要的依赖


在这里插入图片描述

compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
optional("org.aspectj:aspectjweaver")

编写测试代码


// 下面代码都是自定义模块中的
// 实体类User
public class User {
	private Integer id;
	private String userName;
    // 下面就是setter、getter、toString和构造器,此处省略
}

// 注解的方式声明bean
@Configuration
@Component
public class JavaConfig {
	@Bean
	public User user(){
		return new User(1, "psj");
	}
}

// 测试类
public class Test {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
		User user = (User) context.getBean("user");
		System.out.println(user.toString());  // 可以成功输出就OK了!!!
	}
}

4.参考


https://daimingzhi.blog.csdn.net/article/details/107101967

https://www.bilibili.com/video/BV1w94y197DT/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java递归查询树形结构(详解)

一.数据准备 数据库表结构如下所示, INSERT INTO jg_user.com_type(type_id, parent_id, type_name) VALUES (1, 0, 合伙企业); INSERT INTO jg_user.com_type(type_id, parent_id, type_name) VALUES (2, 0, 有限公司); INSERT INTO jg_user.com_type(type_id, p…

力扣(LeetCode)878. 第 N 个神奇数字(C++)

二分查找数论 数论知识——辗转相除法、容斥原理。 辗转相除求最大公约数&#xff0c;两数相乘除以最大公约数&#xff0c;就是最小公倍数。 容斥原理求最多不重复元素&#xff0c;最大不重复面积。 <小学数奥> 从数据范围里&#xff0c;用容斥原理找 a/ba/ba/b 的倍数个…

Pytorch 下 TensorboardX 使用

这里引用一下在其他地方看到的一些话&#xff1a; tensorboard做为Tensorflow中强大的可视化工具&#xff0c;已经被普遍使用。 但针对其余框架&#xff0c;例如Pytorch&#xff0c;以前一直没有这么好的可视化工具可用&#xff0c;PyTorch框架自己的可视化工具是Visdom&…

实验九 数据微积分与方程数值求解(matlab)

实验九 数据微积分与方程数值求解 1.1实验目的 1.2实验内容 1.3流程图 1.4程序清单 1.5运行结果及分析 1.6实验的收获与体会 1.1实验目的 1&#xff0c;掌握求数值导数和数值积分的方法&#xff1b; 2&#xff0c;掌握代数方程数组求解的方法&#xff1b; 3&a…

【Mysql】Centos 7.6安装Mysql8

这里centos为阿里云默认镜像。 一、卸载历史历史版本 1、检查是否有服务启动 # service mysqld status 2、停止mysql服务 # service mysqld stop 3、查看mysql历史安装组件 # rpm -qa|grep mysqlmysql-libs-5.1.71-1.el6.x86_64 4、卸载组件 # rpm -e --nodeps mysql…

2022世界VR产业大会圆满收官,酷雷曼惊艳亮相!

11月14日&#xff0c;由工业和信息化部、江西省人民政府联合主办的全球VR领域规模最大、规格最高、影响最广的年度盛会——2022世界VR产业大会在江西南昌圆满落下帷幕。 本次大会得到了党中央、国务院的高度重视&#xff0c;国务委员王勇出席大会开幕式并讲话&#xff1b;大会邀…

【转】DNS隧道检测特征

原文链接&#xff1a;DNS隧道检测特征总结 - 知乎 一、摘要 企业内网环境中&#xff0c;DNS协议是必不可少的网络通信协议之一&#xff0c;为了访问互联网和内网资源&#xff0c;DNS提供域名解析服务&#xff0c;将域名和IP地址进行转换。网络设备和边界防护设备在一般的情况…

C++:内存管理:C++内存管理详解

C语言内存管理是指&#xff1a;对系统的分配、创建、使用这一系列操作。在内存管理中&#xff0c;由于是操作系统内存&#xff0c;使用不当会造成很麻烦的后果。本文将从系统内存的分配、创建出发&#xff0c;并且结合例子来说明内存管理不当会造成的结果以及解决方案。 一&am…

【Spring】Spring AOP的实现原理

目录 什么是AOP AOP的作用 AOP的优点 AOP框架 Spring AOP AspectJ 术语 1.Target ——目标类 2.Joinpoint ——连接点 3.Pointcut——切入点 4.Advice——通知/增强 5.Weaving——植入 6.Proxy——代理类 7.Aspect——切面 底层逻辑 开发流程 1.导入依…

八、手把手教你搭建SpringCloudAlibaba之Sentinel服务降级之慢调用

SpringCloud Alibaba全集文章目录&#xff1a; 零、手把手教你搭建SpringCloudAlibaba项目 一、手把手教你搭建SpringCloud Alibaba之生产者与消费者 二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心 三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心 …

贪心算法应用

1. 算法思想 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 即选择每一阶段的局部最优&#xff0c;从而达到全局最优。 2. 最大自序和 题目描述 题目链接 给你一个整数数组 n…

用Servlet 编写hello world

第一次接触 Servlet&#xff0c;使用 Servlet 编写代码并配合 Tomcat 在浏览器中展示代码效果&#xff0c;也算是自己这么长时间学习java的一次飞升吧。 本文总结了六步使用 Servlet 编写 helloworld步骤&#xff0c;希望给初学Servlet的同学一些帮助。 0、准备工作 1&#xff…

Python 随机函数random详解

介绍这7个随机数的方法应用&#xff1a; 1、random.random&#xff08;&#xff09;查看源码 说明&#xff1a;用于生成一个0到1的随机符点数: 0 < x < 1.0 import random for i in range(10):print(random.random()) 2、random.uniform&#xff08;&#xff09;查看源码…

深度学习(14)—— 关于Tensorboard

深度学习&#xff08;14&#xff09;—— 关于Tensorboard 文章目录深度学习&#xff08;14&#xff09;—— 关于Tensorboard前言1. “一参数一图”2.“多参数一图”3. “一栏一图”4. “一栏多图”在模型训练过程中loss和acc都会发生变化&#xff0c;常常需要记录这些值&…

Spring Security(2)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 前面已经把需要的环境准备好了&#xff0c;包括数据库和SQL语句&#xff0c;现在再来写代码。至于安装MySQL什么的就跳过去了&#xff0c;娘度子里面一大把。 先…

保护Excel表格的4种常用方法

今天来说说&#xff0c;根据不同需求&#xff0c;我们可以给Excel表格设置保护的4种常用方法&#xff0c;记得保存收藏&#xff0c;总有一个适合你。 方法一&#xff1a; 如果不想Excel表格被他人随意打开&#xff0c;可以设置“打开密码”&#xff0c;这样只有输入设置的密码…

OpenSergo 流量路由:从场景到标准化的探索

流量路由&#xff0c;顾名思义就是将具有某些属性特征的流量&#xff0c;路由到指定的目标。流量路由是流量治理中重要的一环&#xff0c;多个路由如同流水线一样&#xff0c;形成一条路由链&#xff0c;从所有的地址表中筛选出最终目的地址集合&#xff0c;再通过负载均衡策略…

git ssh permission denied解决办法

git ssh permission denied解决办法 1. SSH配置 参考链接 SSH配置文档 2. ssh报错(permission denied) 解决方式&#xff1a; 找到git安装目录 进入etc/ssh文件夹内&#xff0c;找到ssh_config文件&#xff0c;在# Added by git-extra后面添加t替换代码具体参考下面图片 H…

2022强网拟态pwn-store

2022强网拟态pwn-store 这是一个综合题&#xff0c;io链接的构造&#xff0c;orw的系统位数的限制 首先是这个沙箱&#xff0c;64位只有r和w&#xff0c;一开始看的时候很纳闷多了32位的限制&#xff0c;64位还没有o&#xff0c;查了一下才知道这样的seccomp-tools是以64位的…

Design Compiler工具学习笔记(4)

目录 引言 知识储备 实际操作 设计源码 Vivado2018.3仿真 VCS2016仿真 Tcl脚本 约束脚本 MY_TOP.tcl 运行脚本 RUN.tcl 引言 本篇继续学习 DC的基本使用。本篇主要学习 DC 需要的环境约束。 前文链接&#xff1a; Design Compiler工具学习笔记&#xff08;1&#x…