Spring Framework Module Analysis


Spring Framework

Preface

官方网站:https://spring.io/

源码版本:spring 5.3.39

  • 使用 Gradle 作为构建工具,版本 7.5.1;
  • 兼容支持 JDK 8 - 21;
  • 5.3.39 的构建环境:Gradle 7.5.1、JDK 17

官方文档:https://docs.spring.io/spring-framework/docs/5.3.39/reference/html/

Spring Core 模块

Spring-Core 模块是整个 Spring Framework 的基石,提供了诸多基础能力,其他模块大都是基于 core 模块开发的;

  • spring-core 模块包含 asm 和 cglib 依赖,同时鉴于 cglib 本身也是依赖 asm 实现的,因此借助 ShardJar task(Gradle Task) 将 asm 的完整依赖转移到 org.springframework.asm 包下,避免最终打包的 jar 包中包含重复的 asm 源码;
  • spring-core 也提供日志功能,日志门面使用 slf4j、默认日志实现使用 jcl(i.e. apache common logging);
  • 此外,core 模块也提供 spring 框架的诸多基础能力,比如
    • IO 抽象
    • 消息转换器
    • 日志
    • 环境容器
    • 编解码
    • 反射及注解
    • 并发工具以及各类常用工具类,等等

Spring Beans 模块

Spring Beans 模块在 core 模块提供的各类基础能力上构建 Spring 的 Bean 体系,主要包括:

  • Spring 的轻量级 Inversion Of Control(IoC)container 实现;

BeanFactory 借助各类 parser 从 configuration source(e.g. xml、Java Config 等等)解析得到 BeanDefinition,然后根据配置生成 instance,同时提供 Dependency Injection 能力来加工 instance,最后根据 bean 的 lifecycle hook 对 instance 进行处理,从而生成一个完整的 bean 实例。

这里面有几个关键点:BeanDefinition 体系、BeanFactory 体系、bean 的 parser、依赖注入以及 lifecycle hook。

补充:除了 BeanFactory 的抽象体系外,spring-context 模块也提供了 application context 抽象,它是对 BeanFactory 的扩展,当程序位于特定的 context 时(比如 web application),可以使用 ApplicationContext 抽象。

  • 操作 Bean 的工具:BeanWrapper;

Spring Context 模块

Spring Context 模块包含 Spring Aop、Spring Expression、Spring Instrument、Spring beans、Spring core 几个模块,其中:

1、Spring 的 Aop 模块是实现了 Aop Alliance 接口的一种 aop 变种实现;

2、Spring Expression 则提供了 Spring 特有的表达式语言;

3、Spring Instrument 主要与 Java Agent 和 ClassLoader 交互,主要用于运行时对类字节码进行修改,可以实现很多增强功能,比如 Aop 代理、性能监控、集成 AspectJ 等等;

Spring Context 模块主要包含以下功能:

  • Spring 通用缓存抽象体系;
  • 对 EJB(Enterprise JavaBeans)的支持,EJB 是 Java EE(现在叫 Jakarta EE)规范的一部分,主要定义了一系列企业级应用程序组件,比如事务管理、远程方法调用等等,Spring 提供多种方式集成 EJB,比如 JNDI 引用、代理工厂、依赖注入等等;

注意 Spring 的许多模块其实也具备集成功能组件的能力,比如 Spring AOP、声明式事务,各类 xxxTemplate 实例,大多数情况下可以直接使用 Spring 提供的工具,尽量减少直接依赖 EJB。

  • 格式化功能,比如数字、日期格式化;
  • 基于 class loaders 的 LTW (Load-time weaving)机制;
  • Spring JMX 功能;
  • JNDI 功能支持;
  • 远程方法调用支持;
  • 任务调度功能;
  • Spring 对 Script 的支持;
  • Spring 的 stereotype(可以通过注解标注某个类的角色)
  • 对 ui layer 的支持;
  • data binding 和 validation 功能
  • 对 BeanFactory 的扩展,提供 Application Context;

Spring Context Support 模块

该模块是对 context 模块的扩展,提供以下功能:

  • Context 模块缓存抽取体系的实现,比如 caffeine、encache、jcache 等等;
  • Spring 通用邮件体系抽象,以及相关的实现;
  • Context Scheduling 实现:比如 quartz;
  • Context ui 模块支持:提供 freemarker 实现;

Spring JCL 模块

该模块是 Spring 日志系统的辅助模块,Spring 默认使用 Slf4J 作为日志门面, Apache Common Logging 作为日志实现,同时 Spring 集成的其他三方库可能内部会使用其他日志实现,此时需要为 JCL 提供 Bridge 或者 Adapter 功能,将其他日志实现输出的日志路由到日志门面,最后统一交给 JCL 输出。


Author: NaiveKyo
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source NaiveKyo !
  TOC