菜单

概述

相关源文件

本文档概述了 Spring Framework 仓库,涵盖了其架构、核心组件和构建系统。Spring Framework 是一个为现代基于 Java 的企业应用程序提供全面编程和配置模型的框架,在应用程序层面提供基础设施支持。

有关特定子系统的详细信息,请参阅

存储库结构

Spring Framework 仓库是一个多模块的 Gradle 项目,包含 20 多个实现框架不同方面的模块。代码库遵循分层架构,核心基础设施、Web 技术和支持性实用程序之间有明确的分离。

来源:build.gradle1-99 settings.gradle framework-platform/framework-platform.gradle1-153

核心架构

Spring Framework 实现了分层架构,基础实用程序支持更高级别的应用程序服务。核心容器提供控制反转和依赖注入功能,而 Web 模块则在此基础上提供全面的 Web 应用程序支持。

来源:spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java95-130 spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java85-122 spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java57-82

关键组件

IoC 容器实现

Spring 依赖注入的核心实现在 DefaultListableBeanFactory 中,它扩展了 AbstractAutowireCapableBeanFactory,以提供完整的 Bean 生命周期管理,包括实例化、属性填充和销毁。

来源:spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java128-130 spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java121-122 spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java157-158

Web 技术栈

Spring 提供两种 Web 编程模型:传统的基于 Servlet 的 Spring MVC 和响应式 WebFlux 框架。两者共享通用的 HTTP 抽象,但使用不同的执行模型。

来源:spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java82 spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java73 spring-test/spring-test.gradle1-115

构建系统

该项目使用 Gradle,并采用复杂的多模块构建配置。根目录下的 build.gradle 定义了通用配置,而各个模块则拥有扩展通用设置的独立构建文件。

组件目的关键文件
根构建项目范围的配置和插件管理build.gradle, settings.gradle
平台 BOM所有模块的依赖版本管理framework-platform/framework-platform.gradle
模块构建各模块配置spring-*/spring-*.gradle
构建插件用于 Spring 特定任务的自定义 Gradle 插件buildSrc/ 目录
包装器用于一致构建环境的 Gradle 包装器gradle/wrapper/

该构建系统管理超过 150 个外部库的依赖关系,并协调所有 Spring Framework 模块的编译、测试和发布。

来源:build.gradle1-99 framework-platform/framework-platform.gradle9-151 gradle/wrapper/gradle-wrapper.properties1-8

模块依赖

Spring Framework 模块以依赖层次结构组织,这可以防止循环依赖,并允许更高级别的模块基于较低级别的基础设施构建。

这种依赖结构确保了

  • 核心实用程序可供所有模块使用
  • Web 模块可以充分利用 IoC 容器
  • 测试支持涵盖所有层
  • 模块之间不存在循环依赖

来源:spring-web/spring-web.gradle6-12 spring-webmvc/spring-webmvc.gradle6-12 spring-webflux/spring-webflux.gradle6-11 spring-test/spring-test.gradle5-16