Spring 整体架构

28 阅读3分钟

spring 架构.png

1、Core Container

Core Container(核心容器)包含 Core、Beans、Context 和 Expression Language 模块。Core 和 Beans 是框架的基础部分,提供 IoC 和依赖注入。

  • Core 模块包含 Spring 框架的基本核心工具类,其他组件都依赖这个工具类,是基本核心
  • Beans 模块包含配置文件、创建和管理 Bean 以及进行 IoC 和 DI 操作相关的类
  • Context 模块在 Core 和 Beans 基础上,提供了类似 JNDI 注册器(中央化的命名服务,主动查找资源)的对象访问方法,在 Beans 的基础上提供了大量拓展,添加了国际化、事件传播、资源加载和对 Context 透明创建的支持。ApplicationContext 是 Context 模块的关键
  • Expression Language 模块提供强大表达式语言用户在运行时擦汗寻和操作对象

2、Data Access/Integration

Data Access/Integration 包含 JDBC、ORM、OXM、JMS 和 Transaction 模块

  • JDBC 模块提供了 JDBC 抽象层,消除冗长的 JDBC 编码和解析数据库厂商特有的错误代码,提供 Spring 对 JDBC 的访问进行封装的所有类
  • ORM 模块为对象-关系映射 API,利用 ORM 封装包,混合使用所有 Spring 提供的特性进行 O/R 映射。Spring 框架提供了若干个 ORM 框架,遵从 Spring 的通用事务和 DAO 异常层次结构
  • OXM 模块提供对 Object/XML 映射实现的抽象层
  • JMS 模块包含了制造和消费消息的特性
  • Transaction 模块提供编程和声明式事务管理,必须实现的特定接口

3、Web

Web 上下文模块建立在应用程序上下文的基础上,为 Web 应用程序提供上下文,简化了多部分请求并将请求参数绑定到域对象。Web 层主要包含 Web、Web-Servlet、Web-Struts 和 Web-Portlet 模块

  • Web 模块提供基础的面向 Web 的集成特性,初始化 IoC 容器并提供面向 Web 应用的上下文
  • Web-Servlet 模块包含 Spring 的 MVC(model-view-controller) 实现
  • Web-Struts 模块提供对 Struts 的支持
  • Web-Portlet 模块提供用于 Portlet 环境和 Web-Servlet 模块的 MVC 实现。Portlet 是运行在 Portlet 容器中的可插拔的 Web 组件,用于生成动态的、个性化的网页片段

4、AOP

AOP 模块提供了面向切面的编程实现,自定义方法拦截器和切点,将逻辑代码分开降低彼此间的耦合性

  • Aspects 模块提供对 AspectJ 的集成支持

  • Instrumentation 模块提供 class Instrumentation 和 classloader 实现

    • Instrumentation 是 JVM 提供的一个强大功能,它允许在 JVM 启动时或运行时,通过一种称为 "Java Agent" 的特殊程序,来修改或增强已加载或即将加载的类的字节码。

      • 核心接口:java.lang.instrument.Instrumentation
      • 核心能力:通过 ClassFileTransformer 在类被 JVM 加载之前,改变其字节码。

      这比普通的 Spring AOP(基于动态代理)要强大得多,因为它可以:

      1. 对任何类进行增强,包括第三方库中的类(如 String, ArrayList),而不仅仅是 Spring 管理的 Bean。
      2. 增强非接口方法,包括 final 类和方法、static 方法、private 方法等,这些是标准 Spring AOP 无法触及的。

5、Test

Test 模块支持使用 JUnit 和 TestNG 对 Spring 组件进行测试