代号十三
文章12
标签5
分类3
Spring-framework源码分析(一)调试环境搭建

Spring-framework源码分析(一)调试环境搭建

本文主要内容: 搭建spring-framework 编译调试环境源码

准备工作

准备一下工具

  • JDK11(或者JDK8以上即可,本系列采用JDK11)
  • idea 开发工具

源码准备

  • 将代码clone或者Download ZIP均可,这里推荐clone的方式,因为可以方便的对比变化:

仓库

  • clone 完成之后如图所示:

文件

Idea导入项目

  • 打开 Idea,选择 open or import

open or import

  • 选择刚才 clone 的文件夹:

文件夹

  • Spring会自动下载 gradle,但可能会很慢,耐心等待一下即可
  • build.gradle 文件中的 repositories 加入阿里云仓库,如图所示
1
2
3
4
5
6
repositories {
mavenCentral()
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/milestone" } // Reactor
}
  • 在项目的根目录下,有一个 import-into-idea 文件,里面描述了如何导入idea,但其实不按照上面也行

新建模块

  • 由于 Spring 源码使用 gradle 构建源码,所以我们需要新建一个 gradle 模块

  • 取个模块名,我这里就叫做 spring-examples

  • build.gradle 引入依赖
1
2
3
4
5
6
7
8
dependencies {
compile(project(":spring-beans"))
compile(project(":spring-context"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
optional("org.aspectj:aspectjweaver")
testCompile group: 'junit', name: 'junit', version: '4.12'
}

测试

  • 写一个配置类
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.github.code13.app;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
* @author Code13
* @date 2020-07-14 14:27
*/
@ComponentScan("com.github.code13")
//@EnableAspectJAutoProxy 开启Aop注解功能,现在暂时不需要
public class AppConfig {
}
  • 写一个 bean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.github.code13.bean;

import org.springframework.stereotype.Component;

/**
* @author Code13
* @date 2020-07-14 14:46
*/
@Component
public class B {

public B(){
System.out.println("B创建了");
}

public void test1(){
System.out.println("被增强的方法");
}

}
  • 测试类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.github.code13;

import com.github.code13.app.AppConfig;
import com.github.code13.bean.B;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
* AOP测试
*
* @author Code13
* @date 2020-07-14 14:45
*/
class AopTest {

@Test
void test1(){
final AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
final B bean = ac.getBean(B.class);
bean.test1();
System.out.println(bean.getClass().getName());
}

}
  • 查看结果
如果没有什么问题的话,调试环境应该已经搭建成功

success

问题

其实我们在搭建的过程中可能会遇见各种各样的问题,下面尝试对这些问题给出解决方案

Github 下载缓慢的问题

其实关于Github的镜像源有很多,这里还是推荐国内的 Gitee;快是真的快

Spring 源码编译问题

本文作者:代号十三
本文链接:https://code-13.github.io/blogs/83dc2df5.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×