Spring源码解析

news2024/7/6 19:37:13

Idea导入Spring源码

下载

下载gradle

因为Spring源码里没有使用Maven依赖,而是使用gradle依赖,所以我们需要在本地下载安装并配置gradle环境。注意,这里下载安装的gradle版本应与Spring源码中的gradle版本对应。这里推荐下载我的:

链接: https://pan.baidu.com/s/1YVww-x7Furqq3s0KcN27CQ 提取码: 6ai4

下载Spring源码

Spring源码中gradle版本应与自己本地下载的gradle保持一致!这里推荐下载我的:

链接: https://pan.baidu.com/s/186W8TluEc-uOVcKe8Fadbg 提取码: vw8m

安装

解压gradle

  • 1)直接解压gradle到一个目录即完成安装。
  • 2)需要配置环境变量:GRADLE_HOME与Path。
  • 3)验证gradle是否安装成功:gradle -v

这里要注意:本地需要安装JDK8并配置环境变量!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解压Spring源码

  • 1)将下载下来的Spring源码压缩包解压到本地某个目录下;

  • 2)切换到自己解压的Spring源码目录下(这里是我的:C:\Users\Administrator\Desktop\myCode\spring源码学习\spring-framework-5.2.6.RELEASE),在目录上单击输入cmd进入终端,执行gradlew :spring-oxm:compileTestJava 命令;

  • 3)执行gradlew :spring-oxm:compileTestJava可能报错,这里下图有解决方案;
    -在这里插入图片描述
    在这里插入图片描述
    解决方案:在Spring源码中找到build.gradle文件
    在这里插入图片描述在这里插入图片描述

    ## 注释代码
    id 'io.spring.gradle-enterprise-conventions' version '0.0.2'
    ## 修改代码版本号
    mavenBom "com.fasterxml.jackson:jackson-bom:2.10.5"
    mavenBom "io.netty:netty-bom:4.1.39.Final"
    
  • 4)在Spring源码中,找到settings.gradle 文件,添加阿里镜像,下载依赖会快很多!
    在这里插入图片描述

    ## 添加代码
    maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
    
  • 5)在Spring源码中,找到build.gradle文件,添加如下代码(保证gradle能正常在idea中被构建!):
    在这里插入图片描述

    ## 如果idea导入项目依赖有问题 
    ## 报POM relocation to an other version number is not fully supported in Gradle : xml-apis#xml-apis...问题,则添加如下代码即可解决
    configurations.all {
    	resolutionStrategy {
    		force 'xml-apis:xml-apis:1.0.b2'
    	}
    }
    

导入Spring源码

从本地导入项目到idea中

在这里插入图片描述

在这里插入图片描述

以工程的形式导入

在这里插入图片描述

然后等待项目加载依赖即可!

修改idea配置

修改gradle

在这里插入图片描述

修改编码格式

在这里插入图片描述

重新加载依赖

在这里插入图片描述

创建测试项目

前置工作

验证Spring源码环境是否正常

在源码项目中新建一个spring-z-ioc模块(以module的形式创建), 见下图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

创建spring-z-ioc成功后,等idea加载完成:

在这里插入图片描述

创建spring-z-ioc成功后,等idea加载完成:

Spring源码中的settings.gradle文件多了一个子引用
在这里插入图片描述

在spring-z-ioc的build.gradle文件中添加以下代码(重点):
在这里插入图片描述

## 添加代码
compile (project(":spring-aop"))
//compile (project(":spring-aspects")) // 这个不要打开 否则会报错
compile (project(":spring-beans"))
compile (project(":spring-context"))
compile (project(":spring-context-indexer"))
compile (project(":spring-context-support"))
compile (project(":spring-core"))
compile (project(":spring-expression"))
compile (project(":spring-instrument"))
compile (project(":spring-jcl"))
compile (project(":spring-jdbc"))
compile (project(":spring-jms"))
compile (project(":spring-messaging"))
compile (project(":spring-orm"))
compile (project(":spring-oxm"))
compile (project(":spring-test"))
compile (project(":spring-tx"))
compile (project(":spring-web"))
compile (project(":spring-webmvc"))
compile (project(":spring-webflux"))
compile (project(":spring-websocket"))

注:Spring-aspect工程里面的类不要去打开,打开后某些类可能会报错,重启一下idea即可恢复正常;

代码测试

package com.kai;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Component
class TestService {
	public void testMethod() {
		System.out.println("Spring源码导入测试成功!");
	}
}

@Configuration
@ComponentScan("com.kai")
public class Test {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Test.class);
		TestService testService = context.getBean("testService", TestService.class);
		testService.testMethod();
	}
}

//public class Test {
//	public static void main(String[] args) {
//		System.out.println("111111111");
//	}
//}

在这里插入图片描述

解决乱码问题

  • 点击 IDEA 顶部菜单栏中的 Help
  • 点击 Edit Custom VM Options
  • 追加 -Dfile.encoding=UTF-8 到文档末尾
  • 重启 IDEA 即可

完结撒花!愿天下的每一位程序员少走弯路,向着朝阳前行!

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

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

相关文章

Linux网络服务:部署YUM仓库与NFS服务

目录 一、理论 1.部署YUM仓库服务 2.NFS共享存储服务 二、实验 1.通过httpd服务建立yum仓库 2.通过vsftpd服务建立yum仓库 3.搭建NFS实现2台或3台服务器共享一个目录 一、理论 1.部署YUM仓库服务 (1) YUM简介 YUM的前身是YUP,借助于YUM软件仓库&#xff0c…

关于原型链

1-__proto__([[Prototype]])和prototype 每个对象都有一个隐式原型,这个隐式原型可以通过 obj.__proto__ Object.getPrototypeOf(obj)这两种方式获取; 我们都知道对象是通过构造函数构造的,new关键字构造的, 构造函数上有一个显…

如何在华为OD机试中获得满分?Java实现【最佳对手】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 游戏里面,队伍通过匹配…

native层函数没有导出时,如何获得相应函数地址?

前言 每次App重新运行后native函数加载的绝对地址是会变化的,唯一不变的是函数相对于基地址的偏移,因此我们可以在获取模块的基地址后加上固定的偏移地址获取相应函数的地址,Frida中也正好提供了这种方式:先通过Module.findBaseA…

SQL教程1

SQL 是用于访问和处理数据库的标准的计算机语言。 在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等。 SQL 简介 SQL (Structured Query Language:结构化…

OSPF协议

OSPF:开放式最短路径优先协议 无类别IGP协议;链路状态型;基于LSA收敛,故更新量较大,为在中大型网络正常工作,需要进行结构化的部署 --- 区域划分、ip地址规划 组播更新 --- 224.0.0.5 224.0.0.6 支持等开销…

shell变量的使用 rhce(25)

目录 1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) (1&#xff0…

Redis的数据过期策略

数据淘汰策略-使用建议 1.优先使用allkeys-lru策略。充分利用LRU算法的优势,把最近最常访问的数据留在缓存中。如果业务有明显的冷热数据区分,建议使用。 2.如果业务中数据访问频率差别不大,没有明显冷热数据区分,建议使用allkeys…

【AUTOSAR】 AUTOSAR整体开发流程(六)---- ISOLAR与Simuink

ISOLAR与Simuink交互 8.1 AutoSar的几种开发流程 8.2 Simulink 到ISOLAR Simulink生成SWC arxml SWC arxml放到ISOLAR文件夹 F5即可显示 8.3 ISOLAR到Simulink 1、Matlab的几个命令 1)importer Call the constructor arxml.importer to create an importer obj…

Nomad 会替代 Kubernetes 吗?对比一下,两者如何选择?

概 述 根据市场状况,Kubernetes(又称“K8s”)已经成为容器编排之王,超越了Docker Swarm和Mesos等竞争对手。但是,在K8s(2014)出现的同时,还有另一个编排项目HashiCorp的Nomad&…

同城跑腿系统源码,点对点配送,帮你省时省力

随着互联网的发展,越来越多的人开始依赖网络来解决生活中的各种问题。而同城跑腿系统就是其中一个受欢迎的解决方案。 ​同城跑腿系统是指一种基于互联网的服务,通过在线平台将用户和服务提供者连接起来,以便用户可以轻松地安排他们的日常任务…

Selenium Grid- 让自动化分布式执行变得可能

什么是 Selenium Grid? Selenium Grid 是 Selenium 的三大组件之一,允许用户同时在不同的机器和系统上测试不同浏览器。 也就是说 Selenium Grid 支持分布式的测试执行。它可以让你的测试用例在一个分布式的执行环境中运行。 由上图可见,测试…

Python之并发编程二多进程理论

一、什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 二、进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 三、并发与并行 无论是并行还是并发,在用户看来都是’同时’运行的&am…

从实际案例聊聊Java应用的GC优化

概 述 当Java程序的性能无法达到预期目标时,开发人员通常需要借助GC优化来进一步提高性能。然而,GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素大大增加了GC优化的难度。不过&#xf…

GitLab 目录遍历漏洞复现(CVE-2023-2825)

0x01 产品简介 Gitlab是目前被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理,同时可以搭建Web服务。 0x02 漏洞概述 GitLab 存在目录遍历漏洞,当嵌套在至少五个组中的公共项目中存在附…

demlia机器人建模与装配

1 可以用catia中的模型或其他三维建模软件中的模型转化为step格式即可 2 在demlia中打开 3 打开单个零件保存为cgr格式 对机械臂所有零件都做同样的转化 4 新建装配设计,并导入带有坐标的零件 将转化后的零件都选中导入即是装配好的 5 将模式修改为device buildin…

mysql超全语法大全

mysql安装教程 一、登录(使用可视化工具,可忽略) 打开命令行工具,输入以下命令,根据提示输入 root 用户的密码。 mysql -u root -p mysql -u root -p -D 数据库名二、创建数据库 显示数据库:SHOW DATAB…

Shell脚本攻略:条件语句if、case

目录 一、理论 1.条件测试 2.if语句 3.case语句 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 6.实验六 7.实验七 一、理论 1.条件测试 (1)三种测试方法 ① test命令测试 ② [ ]测试(注意前后需要有空格&…

Java多线程编程

Java多线程编程 前言 Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义…

新快报:十年聚焦,巨杉数据库打造中国基础软件的“原创力”

广东省级主流媒体新快报策划“非凡十年,广州答卷”专题,关注十年来广州的“原创力量”,作为土生土长的广州基础软件创新企业,巨杉数据库十年聚焦,从零打造原生分布式数据库,获得逾百家金融银行客户认可&…