查看原文
其他

Spring的这七大模块你了解吗?

Java4ye Java4ye 2022-09-04

小伙伴们早上好呀,4ye 最近会持续分享下这个 Spring 的系列文章📚啦~(中间会穿插一些博客活动的文章) 😄 ,有兴趣的话记得星标下公众号哦⭐

也借此机会好好复习,整理下这个 Spring ,虽然经常用,但是还没好好研究过它……

本文会和大家分享以下几点👇

  1. spring 七大模块
  2. 模块的主要作用
  3. 模块间的依赖关系
  4. spring经典面试题——什么是 Spring

Spring的七大模块

那么先来看看这个图回忆下 Spring 有哪些模块吧

image-20210818204222928

可以分成下面这七大模块👇

  • 数据模块(Data Access / Integration
  • Web模块
  • 切面模块(AopAspects
  • 工具模块(Instrumentation)
  • 消息模块
  • 核心模块
  • 测试模块

小结

image-20210818083333497

后面文章重点会放在颜色深的模块~ 😄

数据模块

数据访问与集成模块 , Data Access/Integration

在这个模块中,有五个小模块,分别是👇

  • JDBC (Java Database Connectivity),Java数据库连接
  • ORM (Object Relational Mapping), 对象关系映射
  • OXM (Object XML Mapping), 对象XML映射
  • JMS (Java Message Service),Java消息服务
  • Transactions事务

看了一眼下来,发现最常用的应该就是这个 ORMTransactions ,而这个 JMSJDBC 差不多,都提供了相应的模板,也是很少用到了,最后这个 OXM 都没点印象的😂

小结

星号的是重点模块~🐷

image-20210817074810253

Web模块

这里有四个模块👇

  • Web
  • WebMVC
  • WebSocket
  • WebFlux

Web 模块 提供了核心部分,如 编解码,过滤器,序列化,国际化,跨域,转换器,客户端和服务端等等

WebMVC 模块 即我们平时用的 SpringMVC

WebSocket 模块 用来支持这个 全双工通信

WebFlux模块 就是这个响应式Web编程模块 ,可以参考下图👇

image-20210818232143827

小结

image-20210818214129615

切面模块

这里有大名鼎鼎的 AOPAspects

Aop : Aspect Oriented Programming , 面向切面编程 ,是对 OOP 的补充

Aspects :切面

不知道小伙伴们看到这里有没有犯迷糊~, 这里居然是两个模块,我一直以为只有 AOP 这个模块🐖

简单说明下这两个模块的不同👇

Spring AOP 是一个基于代理的 Aop 框架 ,日常使用比较多的

Spring Aspects 模块里面则定义了五种类型的切面,如下👇

image-20210817225328713

关于代理可以看看 4ye 之前写的这两篇文章~

小结

image-20210817225858382

工具模块

Instrumentation , 这个是 Java 的一个接口,可以用来做

  • 监控代理
  • 事件日志记录
  • 代码覆盖率

Examples of such benign tools include monitoring agents, profilers, coverage analyzers, and event loggers. —— 来自该接口的注释

还没用过呢🐖

这个 AspectJLTW(load-time-weaver) 就是通过该方式来进行切面织入

消息模块

Spring-messaging 模块提供了一种基于 WebSocketSTOMP 协议实现

STOMP (Simple Text Oriented Messaging Protocol) 是一种 流文本定向消息协议,也是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议

常见的这几个MQ都支持该协议,比如 RocketMQRabbitMQActiveMQ

我们可以通过 Spring 官网的例子上手这个模块,大概如下👇

简单版

启用简单内置消息代理时使用的组件

image-20210818082643375

进阶版

对接外部 MQ 来实现这个广播,订阅

image-20210818082934518

核心模块

来到 Spring 最核心的部分,这里有我们熟悉的 控制反转 (Inversion of Control, IOC ) 和依赖注入( Dependency Injection, DI)

这里有四个核心模块👇

  • Beans
  • Core
  • Context
  • Expression

每一个模块都很重要,这里先列几个大家熟悉的 Bean

比如:

  • BeanFactoryBeans 模块中,IOC 容器的根接口
  • StopWatchCore 模块中,它是 Spring 中的一个计时器,在启动 Spring 项目时经常看到
  • ApplicationContextContext 模块中 ,核心接口
  • ParserContext 就在 Expression 模块中,里面定了这个 EL表达式 的默认前缀 #{ , 后缀 }

小结

大概有这么些内容

image-20210818214831566

测试模块

这里有 MockJunit 等,就不多介绍先🐷

源码依赖图

根据  Spring 源码模块中的 gradle 依赖,可以整理出这么一张依赖关系图👇

image-20210818222259022

什么是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

image-20210818233046626

最后

欢迎小伙伴们来一起探讨问题~

如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝

让我们开始这一场意外的相遇吧!~

欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!

我是4ye 咱们下期应该……很快再见!! 😆

喜欢的话可以关注下公众号 Java4ye 支持下 4ye 呀😝




往期推荐

三分钟快速了解Spring中的工厂模式

花了2个钟才搞懂这AOP为啥没生效,水友却睡着了……

Cglib动态代理探索(ASM,Spring)

Java代理模式和字节码的探索

四种引用类型在Springboot中的使用

Springboot自动装配原理探索

服务发现机制SPI居然是破坏者?!

MySQL各大版本新特性一览

万字长文,带你快速上手这些池化技术!



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存