【Spring源码阅读】Spring源码阅读环境搭建

版权声明:转载请注明本文源地址 https://blog.csdn.net/qwe6112071/article/details/85221663

阅读Spring源码,我们可以通过以下两种方式:

  1. 直接在Idea/Eclipse上创建自己的java maven/gradle项目,导入Spring特定版本依赖Jar和源码,直接运行测试代码,逐步调试阅读
  2. 从github直接获取Spring源码项目,基于Spring源码项目,创建自己的子模块,进行本地项目的Spring源码调试。

对于方式一的好处是可以方便快捷地开始阅读Spring源码,但由于源码来源于Jar包,无法在阅读过程中在源码里添加注释。
对于方式二,虽然开始操作比较麻烦,但后续我们可以基于版本管理随意地对本地项目源码进行修改、添加注释等相关操作。
下面基于方式二,搭建Spring源码阅读环境。

操作步骤

获取Spring源码

  1. 安装git组件,可以从官网下载,根据官网进行安装。
  2. 从github拉去Spring源码,切换到要阅读的版本分支,这里以阅读3.2.18.REALEASE为例。
git clone https://github.com/spring-projects/spring-framework.git
cd spring-framework
git checkout -b v3.2.18.RELEASE

至此代码检出完成

配置Idea测试环境

Spring源码基于Gradle管理,在此之前需要安装 Gradle,这个不多说,下面基于Idea进行示例操作:
首先导入我们的项目到Idea,选择Import Project,然后找到spring-framework文件夹,选中打开项目,导入完后,添加Gradle相关特性,等待Spring项目编译完成image
项目右键->New->Module,基于Gradle-Java 点击Next,如下图:image
基于Spring子模块,GroupId和Version全部继承,然后输入ArtifactId,如下所示,再点击Next,确认模块名和项目路径后,最后点击finish。image
最后再创建的项目模块下,修改build.gradle文件,根据自己需要添加所需Jar,注意通过compile(project(":spring-beans"))等引入本地项目依赖,方便在调试的时候调用本地Spring项目源码,配置如下所示:

plugins {
    id 'java'
}

group 'org.springframework'
version '3.2.18.RELEASE'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "javax.servlet:javax.servlet-api:3.1.0"
    compile 'com.google.guava:guava:21.0'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'mysql:mysql-connector-java:5.1.20'
    compile 'cglib:cglib:3.2.5'
    compile 'org.hibernate.validator:hibernate-validator:6.0.2.Final'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.9.5'
    compile group: 'junit', name: 'junit', version: '4.12'
    compile(project(":spring-beans"))
    compile(project(":spring-core"))
    optional(project(":spring-aop"))
    optional(project(":spring-context"))
    optional(project(":spring-oxm"))
    optional(project(":spring-webmvc"))
    optional(project(":spring-tx"))

}

注意:同步修改Spring各个项目模块下build.gradle中的以下两个配置:sourceCompatibility=1.8targetCompatibility=1.8,确保和项目jdk版本一直,否则会导致运行失败。

创建测试代码

  1. 创建log4j.properties日志文件,用于输出调试日志:
log4j.rootLogger=DEBUG,CONSOLE
log4j.addivity.org.apache=false

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p  %x - %m%n
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  1. 创建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" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean class="com.jeanheo.model.TestBean" id="testBean"/>

</beans>

  1. 创建TestBean
public class TestBean {

    public void echo() {
        System.out.println("Hello World");
    }

}
  1. 创建测试入口
public class BaseTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
        TestBean testBean = context.getBean("testBean", TestBean.class);
        testBean.echo();
    }
}

至此,Spring源码阅读环境搭建完成,通过开启Debug模式,可以通过添加断点,一步步阅读Spring源码。

猜你喜欢

转载自blog.csdn.net/qwe6112071/article/details/85221663