Spring:Spring框架结构 ②

news2024/12/23 14:34:34

一、结构体现的价值

        1、可读性强。

        2、可维护性。

        3、优秀的框架均具有分而治之的思想。清晰的设计、合理的归类、模块化是走向优秀框架的基础性武器。

二、Spring框架的模块划分

        1、整体轮廓  

        Spring框架包含的功能大约由20个小模块组成。这些模块按组可分为核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP和Aspects)、设备(Instrumentation)、消息(Messaging)和测试(Test)。

        2、 模块解读

下面对各个模块进行详细介绍:(这些模块我们也可以在Spring的GitHub上查看到:GitHub - spring-projects/spring-framework: Spring Framework)

(1) 核心容器(Core Container)——Beans、Core、Context、Expression

该层由4个模块组成:spring-beans  spring-core  spring-context  spring-expression(spring expression Language,SpEl) 。它们对应的jar包如下:

  1. spring-core:该模块是依赖注入IoC与DI的最基本实现。
  2. spring-beans:该模块是Bean工厂与bean的装配。
  3. spring-context:该模块构架于核心模块之上,它扩展了 BeanFactory,为它添加了 Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。ApplicationContext 是该模块的核心接口,它的超类是 BeanFactory。与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例 Bean 进行实例化与依赖关系的装配,使之处于待用状态。
  4. spring-context-indexer:该模块是 Spring 的类管理组件和 Classpath 扫描。
  5. spring-context-support:该模块是对 Spring IOC 容器的扩展支持,以及 IOC 子容器。
  6. spring-expression:该模块是Spring表达式语言块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。

(2) 数据访问与集成(Data Access/Integration)——Jdbc、Orm、Oxm、Jms、Transactions

该层由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 个模块组成。它们对应的jar包如下:

  1. spring-jdbc:该模块提供了 JDBC抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
  2. spring-tx:该模块支持编程式事务和声明式事务,可用于实现了特定接口的类和所有的 POJO 对象。编程式事务需要自己写beginTransaction()、commit()、rollback()等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细。
  3. spring-orm:该模块提供了对流行的对象关系映射 API的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring 的其它功能整合,比如前面提及的事务管理。
  4. spring-oxm:该模块提供了对 OXM 实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
  5. spring-jms:该模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了 spring-messaging 模块。

(3) Web——Web、Webmvc、WebFlux、Websocket

该层由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 个模块组成。它们对应的jar包如下:

  1. spring-web:该模块为 Spring 提供了最基础 Web 支持,主要建立于核心容器之上,通过 Servlet 或者 Listeners 来初始化 IOC 容器,也包含一些与 Web 相关的支持。
  2. spring-webmvc:该模块众所周知是一个的 Web-Servlet 模块,实现了 Spring MVC(model-view-Controller)的 Web 应用。
  3. spring-websocket:该模块主要是与 Web 前端的全双工通讯的协议。
  4. spring-webflux:该模块是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。

(4) 面向切面编程——AOP,Aspects

该层由spring-aop和spring-aspects 2个模块组成。它们对应的jar包如下:

  1. spring-aop:该模块是Spring的另一个核心模块,是 AOP 主要的实现模块
  2. spring-aspects:该模块提供了对 AspectJ 的集成,主要是为 Spring AOP提供多种 AOP 实现方法,如前置方法后置方法等。

(5) 设备(Instrumentation)——Instrmentation

spring-instrument:该模块是基于JAVA SE 中的"java.lang.instrument"进行设计的,应该算是 AOP的一个支援模块,主要作用是在 JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现 AOP 的功能。

(6) 消息(Messaging)——Messaging

spring-messaging:该模块是从 Spring4 开始新加入的一个模块,主要职责是为 Spring 框架集成一些基础的报文传送应用。

(7) 测试(Test)——Test

spring-test:该模块主要为测试提供支持的,通过 JUnit 和 TestNG 组件支持单元测试和集成测试。它提供了一致性地加载和缓存 Spring 上下文,也提供了用于单独测试代码的模拟对象(mock object)。

三、核心模块提炼

        1、Spring框架最重要的就是对IOC的应用,资源bean容器的设计极大提升了资源集中化的配置与管理。

        2、还是那句话:有标准,统一化是提升生产力的重要秩序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

独立、相关、正交

文章目录 【1. 独立】【2. 相关】【3.正交】【4. 相互关系】相关和独立相关和正交独立和正交独立、不相关和正交小结 【5. 参考文献】 【1. 独立】 独立:对于两个随机变量 y 1 y_1 y1​ 和 y 2 y_2 y2​,若 y 1 y_1 y1​ 的有关信息不给出 y 2 y_2 …

基于AT89C52单片机的无线温度监测设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87848530?spm1001.2014.3001.5503 源码获取 主要内容: 设计一个温度监测器,温度异常时警报器能够响起,设定初始温度&#xff0…

0基础学习VR全景平台篇第33章:场景功能-嵌入标尺

功能位置示意 一、本功能将用在哪里? 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四种不同类型内容; 本次主要带来标尺类型的介绍,可对VR全景作品中,位置信息较多的场景进行标注,在单场景中植入更多…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

linux守护进程简单创建

1.什么是守护进程? 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引 导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 用户使守护进程独立…

平行云X火山引擎:探索XR观展的极致体验

5月20日,素有艺术界“奥林匹克”之称的第18届威尼斯国际建筑双年展(以下简称“威尼斯双年展”)中国国家馆展览正式开幕。 威尼斯双年展为当今世界规模最大、最具影响力的国际艺术盛事之一,中国文化和旅游部自2005年起主办中国国家…

六一儿童节海外网红营销指南:出海品牌的增长秘诀

六一儿童节作为全球范围内备受关注的节日之一,为孩子们提供了欢乐和庆祝的机会。对于出海品牌来说,利用六一儿童节进行海外网红营销不仅可以吸引年轻消费者的关注,还能够增加品牌的知名度和影响力。根据行业研究机构Statista的数据&#xff0…

第十三章行为型模式—模板模式

文章目录 模板模式解决的问题结构实例存在的问题适用场景 JDK源码 - InputStream 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为…

hive如何实现oracle的connect by prior函数

Hive中如何实现层级查询 类似oracle中 connect by prior 实现的效果? - 知乎 大佬写的很详细,有兴趣自己看,但是存在一个问题 create table test.emp ( empno string, ename string, job string, mgr strin…

如何使用MapStruct优雅的告别get,set

我们开发过程中会遇到很多bean拷贝的过程,最简单粗暴得方法就是set/get方法,当然这也是最臃肿的方法,代码显得过于冗长和笨重,其次还有框架BeanUtils在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。…

网络安全实用篇—iptables防火墙学习总结

iptables防火墙学习总结 目录 iptables简介: iptables题目练习: 题目包含(市赛、省赛、国赛)覆盖所有比赛面! iptables简介: Iptables是Linux系统中的一个防火墙工具,它可以对进出本机的…

用Photoshop软件制作法线图以及查看效果细节

这里是在windows系统下用PS2020做演示。 第一步、在Photoshop软件中打开一张图(最好是正方形,边长是2的n次方大小的像素,例如宽和高都是512像素),如下图所示: 第二步、在菜单栏选择滤镜然后再选择3D接着再选择生成法线图&#xf…

【漏洞复现】DedeCMS存在文件包含漏洞导致后台getshell(CVE-2023-2928)

复现环境下载 https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.106-UTF8.zip 影响版本 DedeCMS V5.7.106 CNVD编号:CNVD-2023-40504 漏洞分析 漏洞文件: uploads/dede/article_allowurl_edit.php存在缺少对该文件中写入内容的任何过滤是导致该漏洞的…

程序员的新型开发工具——低代码平台

低代码的热潮至今未消停, 从阿里钉钉跨平台协作方式,再到飞书上的审批流程,以及目前我们接触到的表单审批、投票的模板,这些都是关于低代码的实现方式。 一、低代码平台概述 按维基百科的说法,低代码这个称呼是 Forres…

大数据时代,Python实现API调用的步骤及示例代码;

Python是一种非常流行的编程语言,可以用于实现各种各样的应用程序,其中包括通过API对各种服务进行调用。API是应用程序接口的缩写,它提供了一种编程接口,允许软件开发者使用其他服务的功能,包括访问数据库、发送电子邮…

【重磅发布】谷云科技与海量数据完成产品兼容性互认证!

近日,谷云科技(广州)有限责任公司(以下简称“谷云科技”)的混合集成平台(ipaas)、全域数据交换平台、主数据管理平台与北京海量数据技术股份有限公司(以下简称“海量数据”)的海量数据库G100管理…

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇

代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇 647. 回文子串解法一:动态规划解法二:双指针中心扩散法 516.最长回文子序列解法一:动态规划 动态规划总结篇动划基础背包问题系列打家劫…

网络安全基本概念

一、什么是网络安全 (1)网络安全 网络安全指网络系统中的硬件、软件以及系统中的数据受到保护,不因偶然或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 网络安全包括:网络…

好程序员解析:2023年物联网的发展现状和未来趋势

物联网:把所有物品通过信息传感设备与互联网连接起来,进行信息交换,即物物相息,以实现智能化识别和管理。 物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。物联网的核心和基础仍然是互联网&…

伊利与腾讯云CODING的「水乳交融」启示录

本文转载雷锋网 “对蜡烛的不断优化,是不可能导致电灯发明的。” 谈数字化与创新能力,有时会掉进这样的误区:更换个别工具=数字化=创新。用蜡烛打个比方,常见的优化是,让蜡烛直径变宽更防风、变…