Spring 的七大模块你了解吗?
小伙伴们好呀,4ye 最近会持续分享下这个 Spring 的系列文章📚啦~(中间会穿插一些博客活动的文章) 😄 ,有兴趣的话记得星标下公众号哦⭐
也借此机会好好复习,整理下这个 Spring ,虽然经常用,但是还没好好研究过它……
本文会和大家分享以下几点👇
- spring七大模块
- 模块的主要作用 
- 模块间的依赖关系 
- spring 经典面试题——什么是 - Spring
Spring 的七大模块
那么先来看看这个图回忆下 Spring 有哪些模块吧
 
 可以分成下面这七大模块👇
- 数据模块(Data Access / Integration) 
- Web 模块 
- 切面模块(Aop,Aspects) 
- 工具模块(Instrumentation) 
- 消息模块 
- 核心模块 
- 测试模块 
小结
 
 后面文章重点会放在颜色深的模块~ 😄
数据模块
数据访问与集成模块 , Data Access/Integration
在这个模块中,有五个小模块,分别是👇
- JDBC(Java Database Connectivity),Java 数据库连接
- ORM(Object Relational Mapping), 对象关系映射
- OXM(Object XML Mapping), 对象 XML 映射
- JMS(Java Message Service),Java 消息服务
- Transactions,事务
看了一眼下来,发现最常用的应该就是这个 ORM 和 Transactions ,而这个 JMS 和 JDBC 差不多,都提供了相应的模板,也是很少用到了,最后这个 OXM 都没点印象的😂
小结
星号的是重点模块~🐷
 
 Web 模块
这里有四个模块👇
- Web 
- WebMVC 
- WebSocket 
- WebFlux 
Web 模块提供了核心部分,如 编解码,过滤器,序列化,国际化,跨域,转换器,客户端和服务端等等
WebMVC 模块 即我们平时用的 SpringMVC
WebSocket 模块 用来支持这个 全双工通信
WebFlux 模块 就是这个响应式 Web 编程模块 ,可以参考下图👇
 
 小结
 
 切面模块
这里有大名鼎鼎的 AOP 和 Aspects
Aop: Aspect Oriented Programming , 面向切面编程 ,是对OOP的补充
Aspects: 切面
不知道小伙伴们看到这里有没有犯迷糊~, 这里居然是两个模块,我一直以为只有 AOP 这个模块🐖
简单说明下这两个模块的不同👇
Spring AOP 是一个基于代理的 Aop 框架 ,日常使用比较多的
Spring Aspects 模块里面则定义了五种类型的切面,如下👇
 
 关于代理可以看看 4ye 之前写的这两篇文章~
小结
 
 工具模块
Instrumentation , 这个是 Java 的一个接口,可以用来做
监控代理
事件日志记录
代码覆盖率
Examples of such benign tools include monitoring agents, profilers, coverage analyzers, and event loggers. —— 来自该接口的注释
还没用过呢🐖
这个 AspectJ 的 LTW(load-time-weaver) 就是通过该方式来进行切面织入的
消息模块
Spring-messaging模块提供了一种基于WebSocket的STOMP协议实现
STOMP(Simple Text Oriented Messaging Protocol) 是一种 流文本定向消息协议,也是一种为 MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议常见的这几个 MQ 都支持该协议,比如
RocketMQ,RabbitMQ,ActiveMQ
我们可以通过 Spring 官网的例子上手这个模块,大概如下👇
简单版
启用简单内置消息代理时使用的组件
 
 进阶版
对接外部
MQ来实现这个广播,订阅等
 
 核心模块
来到 Spring 最核心的部分,这里有我们熟悉的 控制反转 (Inversion of Control, IOC ) 和依赖注入( Dependency Injection, DI)
这里有四个核心模块👇
- Beans 
- Core 
- Context 
- Expression 
每一个模块都很重要,这里先列几个大家熟悉的 Bean
比如:
- BeanFactory在- Beans模块中,- IOC容器的根接口
- StopWatch在- Core模块中,它是- Spring中的一个计时器,在启动- Spring项目时经常看到
- ApplicationContext在- Context模块中 ,核心接口
- ParserContext就在- Expression模块中,里面定了这个 EL 表达式 的默认前缀- #{, 后缀- }
小结
大概有这么些内容
 
 测试模块
这里有 Mock,Junit 等,就不多介绍先🐷
源码依赖图
根据  Spring 源码模块中的 gradle 依赖,可以整理出这么一张依赖关系图👇
 
 什么是 Spring?
这里分享下 4ye 滴思路🐖
Spring 是一个轻量级框架,有七大模块,分别为 数据,Web,切面,工具,消息,核心,测试
总共 20 几个小模块
核心模块有 Beans,Core,Context,Expression , IOC 和 DI⭐
切面模块主要有 AOP ,涉及到这个 AOP 编程 ⭐
Web 模块有 Web,WebMVC, WebSocket, WebFlux
数据模块主要有 ORM ,TX
方便扩展,比如 邮件,缓存,定时任务等模块
总结
本期介绍了这七大模块,以及各模块间的依赖,作用
4ye 已经将本期内容整理成了一个思维导图,有需要的小伙伴访问该地址自行保存就可以啦😄
(图片太大了,被压缩后看不清了 🙄)
https://processon.com/chart_image/611d2098f346fb37da73b8e1.png
 
 最后
欢迎小伙伴们来一起探讨问题~
如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝
让我们开始这一场意外的相遇吧!~
欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!
我是 4ye 咱们下期应该……很快再见!! 😆
喜欢的话可以关注下公众号 Java4ye 支持下 4ye 呀😝
版权声明: 本文为 InfoQ 作者【4ye】的原创文章。
原文链接:【http://xie.infoq.cn/article/99462d927937d1f112741ed2f】。文章转载请联系作者。












 
    
评论