要学习Spring 源码,一个是从Spring GitHub 上去down源码,然后倒入IDEA编译,但这种方法费时费力,如果你不需要对Spring 源码进行修改后,再编译的话,直接搭建一个Spring Demo 的Maven项目,引入Spring 对应依赖,下载源码包,通过Demo来学习。
本专栏就通过该Demo来学习Spring 源码,并将相关内容记录到该专栏中。
Spring Demo项目地址:https://github.com/jujunchen/Spring-Demo
pom.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>spring-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.31</version>
</dependency>
</dependencies>
</project>
这里引入了spring-context
依赖,做为最基本的spring依赖,因为其包含了主要的Spring特性spring-beans、spring-aop、spring-context、spring-core、spring-expression、spring-jcl
。
Test
Bean.java
java
package com.spring.test.demo.bean;
import org.springframework.stereotype.Component;
@Component
public class Bean {
public void print() {
System.out.println("Spring Test");
}
}
SpringTest.java
java
package com.spring.test.demo;
import com.spring.test.demo.bean.Bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(Bean.class);
applicationContext.refresh();
Bean bean = applicationContext.getBean(Bean.class);
bean.print();
}
}
测试结果
Spring 模块
进度
模块 | 描述 |
---|---|
spring-aop | 要使用AOP相关的功能(事务、切面)需要包含该模块 |
spring-aspects | 包含AspectJ AOP库进行高级集成的所有类 |
spring-beans | 包含对Spring bean进行操作的类 |
spring-beans-groovy | 对Spring bean进行操作的Groovy类 |
spring-context | 包含Spring Core提供的许多扩展类,如ApplicationContext |
spring-context-indexer | 包含一个索引器实现, 它提供对META-INF/spring.components 中定义的候选项的访问功能,但核心类CandidateComponentsIndex 并不能再外部使用 |
spring-context-support | 该模块是对spring-context模块的进一步扩展,在用户界面方面,有一些用于支持邮件并与模块引擎集成的类,还包括与各种任务执行和调度库(CommonJ和Quartz)的集成 |
spring-core | 主要模块,其他Spring模块都会依赖该模块 |
spring-expression | 包含SpEL表达式的支持类 |
spring-instrument | 包含用于JVM启动的Spring工具代理,如果在Spring应用程序中使用AspectJ实现加载织入,那么该模块是必需的 |
spring-jcl | 日志框架 |
spring-jdbc | 包含所有的JDBC支持类 |
spring-jms | 所有JMS支持类 |
spring-messaging | 提供消息传递的基础结构和协议 |
spring-orm | 扩展了Spring的标准JDBC功能集,支持流行的ORM工具,包含Hibernate、JDO、JPA和数据映射器IBATIS。该JAR文件中的许多类都依赖于spring-jdbc JAR文件中所包含的类,因此也需要把它包含在程序中 |
spring-oxm | 为Object/XML映射OXM提供支持,用于抽象XML编组和解组以及支持Castor、JAXB、XMLBeans和XStream等常用工具的类都包含在此模块中 |
spring-test | Spring提供的帮助测试程序的包 |
spring-tx | 提供支持Spring事务的所有类 |
spring-web | 包含Web程序中使用的所需核心类 |
spring-web-reactive | 响应式模型的核心接口和类 |
spring-webmvc | Spring自己的MVC框架 |
spring-websocket | Spring对WebSocket的支持类 |
作者其他要推荐的文章,欢迎来学习:
基于Spring Boot 3.1.0 系列文章