• Spring源码深度解析:一源码环境安装


    1、环境搭建

    1.1 gradle安装

    Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写,需要到gradle官网下载对应版本
    windows环境下需要修改系统变量,添加GRADLE_HOME系统变量,指向gradle根目录。环境配置成功后,在命令行输入:gradle -v 显示如下截图:
    在这里插入图片描述
    源码链接获取

    1. 进入官网https://projects.spring.io/spring-framework/,点击那个小猫的图像,进入github下载相应版本的spring源码。
      在这里插入图片描述

    2. 切换为最新的 Spring 5.1. x版 源码 ,获取 Git 分支链接
      在这里插入图片描述
      源码下载及 IDEA 导入
      在这里插入图片描述

    3. 本地安装目录设置
      在这里插入图片描述

    4. 拉取等待
      在这里插入图片描述
      也可以手动直接下载源码到本地

    5. 执行gradlew.bat
      在这里插入图片描述
      直接双击执行gradlew.bat即可。执行完成以后,会出现build success的提示,但是这个时候还不算完,为了导入能导入idea中,还需要用gradlew命令去编译spring-oxm文件包。

    即执行以下命令:gradlew.bat cleanIdea :spring-oxm:compileTestJava
    完成后,看到如下结果,就离成功不远了。
    在这里插入图片描述
    6. IDEA导入源码
    在这里插入图片描述
    此处的gradle使用我们之前自己安装的4.3.1版本,不要用IDE自带的;

    将jdk版本升级到1.8,因为在最新的Spring中使用到了jdk1.8的新特性,如果不升级到1.8会报错;

    最后idea会自动编译spring源码,编译成功以后,所有的模块都会有个小小的蓝色图标,表示编译成功,至此spring源码导入完成。
    此处的gradle使用我们之前自己安装的4.3.1版本,不要用IDE自带的;

    将jdk版本升级到1.8,因为在最新的Spring中使用到了jdk1.8的新特性,如果不升级到1.8会报错;

    最后idea会自动编译spring源码,编译成功以后,所有的模块都会有个小小的蓝色图标,表示编译成功,至此spring源码导入完成。
    在这里插入图片描述

    1.2 创建测试项目

    导入成功之后可以在project下创建一个自己的测试module

    1. 项目根目录右键 -> new -> module -> gradle
      在这里插入图片描述
    2. 在新项目的build.gradle下添加对spring模块的依赖,这里我先添加了spring-beans 和spring-core的依赖。
    dependencies {
        compile(project(":spring-beans"))
        compile(project(":spring-core"))
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 在新项目的src/main/resource下添加spring-config.xml文件
    <?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="myTestBean" class="com.chenhao.spring.MyTestBean"/>
    
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 创建测试bean和启动类
    package com.chenhao.spring;
    
    /**
     * @author: ChenHao
     * @Description:
     * @Date: Created in 10:35 2019/6/19
     * @Modified by:
     */
    public class MyTestBean {
        private String name = "ChenHao";
    
        public MyTestBean(String name) {
            this.name = name;
        }
    
        public MyTestBean() {
        }
    
        @Override
        public String toString() {
            return "MyTestBean{" +
                    "name='" + name + '\'' +
                    '}';
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    import com.chenhao.spring.MyTestBean;
    import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    
    /**
     * @author: ChenHao
     * @Description:
     * @Date: Created in 10:36 2019/6/19
     * @Modified by:
     */
    public class AppTest {
        @Test
        public void MyTestBeanTest() {
            BeanFactory bf = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));
            MyTestBean myTestBean = (MyTestBean) bf.getBean("myTestBean");
            System.out.println(myTestBean.getName());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    之后就可以愉快的调试spring源码了。

  • 相关阅读:
    进程管理之wait和waitpid
    【大数据】Kafka 实战教程(二)
    用Python绘制了若干张词云图,惊艳了所有人
    盲盒一番赏小程序:打开未知的惊喜之旅
    LeetCode_496_下一个更大元素Ⅰ
    多线程的重要资料-信号量
    MYSQL8.0 WITH RECURSIVE递归查询
    CRM系统中人工智能对销售业务的帮助
    37.JavaScript对象与JSON格式的转换,JSON.stringify、JSON.parse方法的使用方法和注意事项
    MySQL里的查看操作
  • 原文地址:https://blog.csdn.net/wts563540/article/details/125556784