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

开发 前端
小伙伴们早上好呀,4ye 最近会持续分享下这个 Spring 的系列文章啦。

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

  1. spring 七大模块
  2. 模块的主要作用

  3. 模块间的依赖关系

  4. spring经典面试题——什么是 Spring

Spring的七大模块

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

可以分成下面这 七大模块 :point_down:

  • 数据模块( Data Access / Integration )

  • Web模块

  • 切面模块( Aop , Aspects )

  • 工具模块( Instrumentation )

  • 消息模块

  • 核心模块

  • 测试模块

小结

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

数据模块

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

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

  • 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 都没点印象的:joy:

小结

星号的是重点模块~:pig:

Web模块

这里有四个模块:point_down:

  • Web

  • WebMVC

  • WebSocket

  • WebFlux

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

WebMVC 模块即我们平时用的 SpringMVC

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

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

小结

切面模块

这里有大名鼎鼎的 AOP 和 Aspects

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

Aspects :切面

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

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

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

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

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

  • :point_right: 《Java代理模式和字节码的探索》

  • :point_right: 《Cglib动态代理探索(ASM,Spring)》

小结

工具模块

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

  • 监控代理

  • 事件日志记录

  • 代码覆盖率

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

还没用过呢:pig2:

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

消息模块

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

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

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

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

简单版

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

进阶版

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

核心模块

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

这里有四个 核心模块 :point_down:

  • Beans

  • Core

  • Context

  • Expression

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

比如:

  •  
    1. BeanFactory 
    2. Beans 
    3. IOC 

 

  •  
    1. StopWatch 
    2. Core 
    3. Spring 
    4. Spring 
  • ApplicationContext 在 Context 模块中 , 核心接口
  • ParserContext 就在 Expression 模块中,里面定了这个 EL表达式 的默认前缀 #{ , 后缀 }

小结

大概有这么些内容

测试模块

这里有 Mock , Junit 等,就不多介绍先:pig:

源码依赖图

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

什么是Spring?

这里分享下 4ye 滴思路:pig2:

Spring 是一个轻量级框架,有七大模块,分别为 数据,Web,切面,工具,消息,核心,测试

总共 20 几个小模块

  • 核心模块有 Beans,Core,Context,Expression ,   IOC 和 DI:star:

  • 切面模块主要有 AOP ,涉及到这个 AOP 编程 :star:

  • Web模块有 Web,WebMVC, WebSocket, WebFlux

  • 数据模块主要有 ORM ,TX

方便扩展,比如 邮件,缓存,定时任务等模块

总结

本期介绍了这七大模块,以及各模块间的依赖,作用

4ye已经将本期内容整理成了一个思维导图,有需要的小伙伴访问该地址自行保存就可以啦:smile:

(图片太大了,被压缩后看不清了 )

https://processon.com/chart_image/611d2098f346fb37da73b8e1.png

 

责任编辑:张燕妮 来源: Java4ye
相关推荐

2015-08-05 16:21:23

开源社区

2018-08-06 06:29:01

区块链区块链技术职业

2016-06-06 09:49:15

2013-07-22 15:36:48

谷歌秘密项目

2021-02-19 23:42:18

高考物联网农业

2021-08-05 17:59:45

Vue 3.0前端代码

2024-09-04 08:31:01

语言模型设计

2009-05-04 15:26:59

Linux兼容性能

2010-07-30 13:05:36

浏览器

2013-08-05 09:38:44

2012-12-28 14:38:36

2024-06-12 11:47:38

2009-03-17 08:33:22

Windows7节省开支

2016-06-14 10:29:10

Linux51CTO IT技术周刊

2022-10-08 09:41:09

Docker容器

2010-05-24 13:04:53

jQueryJavaScript

2020-12-22 09:55:55

IT首席信息官CIO

2022-05-23 08:09:42

物联网IOT

2015-07-08 08:51:11

SDN

2020-12-18 10:35:27

IT技术领导者
点赞
收藏

51CTO技术栈公众号