学习Spring源码篇之环境搭建

简介: 本文是学习 Spring 源码的第一篇,下载 Spring 源码及编译运行并测试。

本文是学习 Spring 源码的第一篇,下载 Spring 源码及编译运行并测试。


环境准备


JDK11、Gradle、Maven、SpringFramework 5.2.0.RELEASE


下载源码及编译


进入 github :https://github.com/spring-pro...


在 Tags 中选择需要的版本,随后右侧下载即可。

1654830898365.png

下载完成解压后,进入spring-framework-5.2.0.RELEASE文件中,通过终端执行以下命令:

./gradlew :spring-oxm:compileTestJava
如果下载过慢可以使用阿里云镜像。

image.png

随后通过 IDEA 导入项目,gradle 会自动编译。


在编译中可能会报如下错误:


POM relocation to an other version number is not fully supported in Gradle : xml-apis:xml-apis:2.0.2 relocated to xml-apis:xml-apis:1.0.b2.


修改引入方式,修改 bulid.gradle,搜索 configurations.all,添加如下内容:


force 'xml-apis:xml-apis:1.4.01'

configurations.all {
        resolutionStrategy {
            cacheChangingModulesFor 0, "seconds"
            cacheDynamicVersionsFor 0, "seconds"
            force 'xml-apis:xml-apis:1.4.01'
        }
}

随后我们排除掉spring-aspects模块,右键该模块选择 Load/UnLoad Modules... 即可。


测试


我们新建一个 gradle 模块项目 springdemo 进行测试。目录结构如下:

image.png

build.gradle 加入依赖,这里只加入 context 是因为 context 中已经引入了 code、aop、beans 等核心模块。

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

先创建一个接口和实现类。

public interface WelcomeService {
    String sayHello(String name);
}
@Service
public class WelcomeServiceImpl implements WelcomeService {
    @Override
    public String sayHello(String name) {
        System.out.println("欢迎你:" + name);
        return "success";
    }
}

创建 spring 的配置文件,然后注册 bean。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="welcomeService" class="cn.jack.service.impl.WelcomeServiceImpl"/>
</beans>

最后我们创建启动类进行测试。

/**
 * @author 神秘杰克
 * 公众号: Java菜鸟程序员
 * @date 2022/3/14
 * @Description 启动类
 */
public class Entrance {
   public static void main(String[] args) {
      ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/spring-config.xml");
      WelcomeService welcomeService = (WelcomeService) applicationContext.getBean("welcomeService");
      welcomeService.sayHello("Spring框架!");
   }
}

运行结果:

> Task :springdemo:Entrance.main()
欢迎你:Spring框架!
BUILD SUCCESSFUL in 9s

OK,到这里就完成了 Spring 源码的下载编译及测试。

相关文章
|
1月前
|
Java 数据格式 微服务
2024最新首发,全网最全 Spring Boot 学习宝典(附思维导图)
📚 《滚雪球学Spring Boot》是由CSDN博主bug菌创作的全面Spring Boot教程。作者是全栈开发专家,在多个技术社区如CSDN、掘金、InfoQ、51CTO等担任博客专家,并拥有超过20万的全网粉丝。该教程分为入门篇和进阶篇,每篇包含详细的教学步骤,涵盖Spring Boot的基础和高级主题。
110 4
2024最新首发,全网最全 Spring Boot 学习宝典(附思维导图)
|
1月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的在线学习过程管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线学习过程管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线学习过程管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
22天前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
60 11
|
20天前
|
安全 Java 数据库
三更草堂 Spring Security学习总结(思路整理)
Spring Security学习总结(思路整理)
|
23天前
|
缓存 Java 程序员
spring IoC 源码
spring IoC 源码
38 3
|
1月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的大学生国学自主学习平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的大学生国学自主学习平台的详细设计和实现(源码+lw+部署文档+讲解等)
|
1月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
1月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
22天前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。