01-Spring核心组件
# 核心基础组件
Spring 基础组件包含六个,相应的关系如下图:
从箭头的流向可以归纳出从底到上的分层结构:
- spring-jcl、spring-instrument、kotlin-coroutines 是底层基础,不依赖 Spring;
- 其它组件,可以标记为 L1;
- spring-core 依赖于 spring-jcl、kotlin-coroutines 而又不依赖其它 Spring 组件,可以标记为 L2;
- spring-expression、spring-beans 依赖于 spring-jcl 和 spring-core 又不依赖其它 Spring 组件,可以标记为 L3;
- spring-aop 依赖于 spring-jcl、spring-core、spring-beans 而又不依赖其它 Spring 组件,可以标记为 L4;
- spring-context 依赖于 spring-jcl、spring-core、spring-expression、spring-beans、spring-aop,可标记为L5。
- Spring-jcl: JCL 全称:Jakarta Commons Logging,Spring-jcl 采用了设计模式中的“适配器模式”,它对外提供统一的接口,然后在适配类中将对日志的操作委托给具体的日志框架;
- Spring-core: Core 模块主要的功能是实现了反向控制 IOC(Inversion of Control)与依赖注入DI(Dependency Injection)、Bean 配置以及加载。Core 模块中有 Beans、BeanFactory、BeanDefinitions、ApplicationContext 等几个重要概念;
- Spring-expression: Spring 表达式语言,解析 Spring 表达式语言;
- Spring-beans: 负责 Bean 工厂中 Bean 的装配,所谓 Bean 工厂即是创建对象的工厂,Bean 的装配也就是对象的创建工作。重点:BeanFactory;
- Spring-aop: Spring 提供了面向切面功能的模块;
- Spring-context: Spring 的 IOC 容器,因大量调用 Spring Core 中的函数,整合了 Spring 的大部分功能。 Bean 创建好对象后,由 Context 负责建立 Bean 与 Bean 之间的关系并维护。所以也可以把 Context 看成是 Bean 关系的集合,重点:ApplicationContext。
使用的其它组件:
- Spring-instrument: 相当于一个检测器,提供对 JVM 以及对 Tomcat 的检测;
- kotlin-coroutines: 引入了协程。
为了方便查看,我们去掉了 Spring 核心组件的描述,仅仅描述核心组件之间的关系,如下图所示:
# 高级应用组件
本文根据 Spring5.x 官方最新文档画出的 Spring 的架构图如下:
可以看到 Spring 核心组件 core 位于所有组件的核心,它包含了 DI,事件,资源,国际化,验证,数据绑定,类型转换,SpEL,AOP 等主要功能,基于核心应用组件之上的组件有:数据访问(data access)、Web 框架、Spring 还支持动态脚本语言如 Groovy,也提供了 Kotlin 的支持、及其它各种框架及组件如调度,邮件,缓存,远程调用等的支持集成。最后,Spring 还提供了方便的测试支持 spring-test。
下面对各组件做一下详细介绍。
# 1. web 框架
- Spring-web: Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文;
- Spring-webmvc: 主要用于在遵守 Servlet 规范的前提下,将 Spring 框架集成到 Java web 应用中;
- Spring-websocket:Spring 在 4.0 后将 WebSocket 集成了进去,即 Spring-websocket 模块。它与 Java WebSocket API 标准(JSR-356)兼容,并且还提供额外功能;
- Spring-webflux: Spring Framework 5.0 中引入的新的反应式 Web 框架。 与 Spring MVC 不同,它不需要 Servlet API,完全异步和非阻塞, 并通过 Reactor 项目实现 Reactive Streams 规范。 并且可以在诸如 Netty, Undertow 和 Servlet 3.1+ 容器的服务器上运行。
# 2. 数据访问
- Transactions: 事务管理
- DAO Support: 数据访问对象
- JDBC: jdbcTemplate
- O/R Mapping: jpa,hibernate
- XML Marshalling: xml 读取
# 3.消息框架
Spring-messaging
# 高级组件的关系
我们看一下他们之间的相互关系,完整的依赖图如下所示:
从图中可以看出来各组件以下依赖关系:
- spring-web 依赖于 Spring 核心组件和 spring-oxm;
- spring-webmvc 依赖于 Spring核心组件和 spring-web,spring-context-support,spring-oxm;
- spring-websocket 依赖于 Spring 核心组件和 spring message,spring-web,spring-webmvc;
- spring-webflux 依赖于 Spring 核心组件和 spring-context-support,kotlin-coroutines。
# 总结
Spring 框架本身包含的内容比较多,盲目的去阅读其源代码,只会陷入代码的沼泽中;源码 Spring 源码讲解战略战术:从战略上搞清楚 Spring 的各个组件及应用场景,然后从战术上根据自己的弱点进行加强练习,才可以练就一身神功。官方文档是我们了解 Spring 框架组件及应用场景的最好来源,通过使用思维导图来将官网文档进行浓缩精华,是一种值得推荐的方式。你瞧!你是否对 Spring 框架有了总体的认识了?
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19