Spring框架之体系结构和目录结构

news2025/2/25 22:22:20

Spring是由Rob Jonson租住和开发的一个分层的JavaEE/SE一站式(full stack)轻量级开发框架,他的核心思想是控制翻转(Inversion of Control IOC)和面向切面(Aspect Oriented Programming, aop)的编程,其中IoC是Spring的基础,它支撑着Spring对Java Bean的管理功能;Aop是Spring的重要特性,AOP是通过预编译的方式和运行期间动态代理实现程序功能,即在不修改代码的情况下,为程序统一添加功能。
Spring贯穿于表现层、业务逻辑层和持久层:
在表现层提供了Spring MVC框架
在业务逻辑层可以管理事务、记录日志
在持久层可以整合MyBatis、Hibernate、JDBCTemplate等技术
Spring是模块化的,允许使用者只选择使用自己的模块, Spring 框架采用分层架构,根据不同的功能被划分成了21个模块,主要分成8大模块
在这里插入图片描述

1. 核心容器

Spring 的核心容器是其他模块建立的基础,在Spring的功能体系中起着支撑作用,是其它模块的基石。由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。

Beans 模块

Bean模块提供了BeanFactory类,是工厂模式的经典实现,Bean模块的主要作用是创建和管理Bean对象。

Core 核心模块

封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。提供了Spring框架的基本组成部分,包括Ioc和DI

Context 上下文模块

Context 建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。

SpEL 模块

SpEL(Spring Expression Language) 模块是Spring 3.0后新增的模块,提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。

2. 数据访问集成(Data Access/Integration)

数据访问/集成层包括 JDBC,ORM,OXM,JMS 和Transactions 模块,它们的细节如下:

JDBC模块

JDBC-Java Data Base Connectivity模块提供了 一个JDBC的 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

ORM 模块

ORM-Object Relational Mapping模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合。

OXM 模块

OXM-Object XML Mapping模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。

JMS 模块

JMS-Java Messaging Serivice模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。

Transactions 模块

事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细)

Web模块

Web模块的实现基于ApplicationContext,它提供了Web应用的各种工具类,包括 Web-Socket,Servlet,Web和 Portlet 组成,它们的细节如下:

Web-Socket 模块

Web-Socket 模块是Spring 4.0后新增的模块,它提供了 WebSocket和SockJS的实现,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。

Servlet 模块

Servlet 模块提供了Spring的模型、视图、控制器、以及Web应用程序Rest Web服务的实现。

Web模块

Web模块提供了针对Web开发的集成特性,如大部分文件上传功能等,此外,Web模块还包含一个客户端和Spring 远程处理支持的Web相关部分。

Portlet 模块

Portlet 模块的功能类似于Servlet模块,提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

4、其他模块

还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:

AOP 模块

AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。

Aspects 模块

Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation 模块I
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
Messaging 模块
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。

Test模块

测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
常用模块之间的依赖关系
在这里插入图片描述

spring的目录结构

https://repo.spring.io/ui/native/release/org/springframework/spring/
下载解压后由3个文件夹:docs、libs、schema

docs文件夹

该文件夹下存放Spring的相关文档,包括开发指南、API参考文档

libs文件夹

该文件夹下存放开发所需要的jar包和源码,整个spring框架由21模块组成,libs目录下spring为每个模块提供给了3个压缩包,因此,libs文件夹下共有63压缩包。这63个压缩包分为三类:
以RELEASE.jar结尾的JAR包是Spring框架的class文件
以RELEASE-javadoc.jar结尾的JAR包是Spring框架的API文档的压缩包
以RELEASE-source.jar结尾的JAR包是Spring框架的源码的压缩包

schema文件夹

该文件夹下存放spring各种配置文件的XML Schema文档

注意

在使用spring开发时,除了使用自带的jar保外,spring的核心容器还需要历来commons-logging的jar包。

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

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

相关文章

国标28181-2022 变更说明

此为国标28181协议的第3版本,变更调整较大:正式发布之后替代了原国标28181-2011协议和国标28181-2016版本的协议 此次参与修订的企业:公安部第一研究所,视频图像信息智能分析与共享应用技术国家工程实验室,国家信息中…

js正则校验特殊的不可见字符

背景 表单的输入框,用户可能从Excel或者其他地方直接复制粘贴,这时候提交到后端会导致获取的用户输入中包含一些特殊的不可见字符,比如tab键或者制表符等,这时需要在前端对用户输入做一些检验,检查是否存在不可见字符…

制作投票的链接制作投票链接的制作个投票链接

大家在选择投票小程序之前,可以先梳理一下自己的投票评选活动是哪种类型,目前有匿名投票、图文投票、视频投票、赛事征集投票等。 我们现在要以“摄影能力提升”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星”投票…

LabVIEWCompactRIO 开发指南35 使用桌面执行节点

使用桌面执行节点 通常建议使用桌面执行节点来验证组件。由于它执行FPGA VI仿真模式,因此可以为包含目标资源(如I/O和存储器项目)的VI开发测试。本节介绍为组件测试设置桌面执行节点的步骤。 考虑一个以LabVIEW FPGA组件为该组件的示例&…

DNC数控机床联网及数据采集系统@杭州乐芯科技

项目背景 中国政府高度重视工业化与信息化融合,十八大以后,已经将“两化深度融合”上升为国家战略。工信部在2013年9月的“两化深度融合专项行动”中重点强调“培育数字化车间、智能工厂,推广智能制造生产模式”以及“在重点行业组织开展试点…

《分布式缓存(二)- Redis主从》

文章目录 Redis主从1.搭建主从架构1.1.Redis主从Linux版1.2.Redis主从Windows版2.主从数据同步原理2.1.全量同步2.2.增量同步2.3.repl_backlog原理3.主从同步优化4.小结Redis主从 1.搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主…

virtualenv使用教程

添加不同版本的python虚拟环境时要把path添加到系统变量里 运行代码 先激活,在对应版本的cd Scripts目录下输入 .\activate 激活后,输入以下,注意路径检查 python xxx.py

【Docker容器】Docker安装ElasticSearch详细步骤(看这一篇就够啦!)

前言 帮助有些小伙伴能快速学习ElasticSearch的语法命令不至于在安装的时候卡住或者放弃,只要按照下面的安装步骤就可以快速启动一个es进行学习啦,话不多说直接开搞。 安装 ES 1.访问镜像官网 https://hub.docker.com/ 搜索elasticsearch进行查找&…

通信原理 | 傅里叶变换(先立个贴在这,还没写好)

概念 傅里叶变换是一种将一个信号(可以是声音、图像等)从时域(时间轴上)转换到频域(频率轴上)的数学工具。 它可以将一个复杂的信号分解成若干简单的正弦波,每个正弦波都有自己的频率、振幅和相位。这个过程可以被看作是把一个复杂的信号拆分为若干个单频信号的叠加。…

【论文速递】ICLR2022 - 语言驱动的语义分割

【论文速递】ICLR2022 - 语言驱动的语义分割 【论文原文】:LANGUAGE-DRIVEN SEMANTIC SEGMENTATION 【作者信息】:Boyi Li Cornell University, Cornell Tech Kilian Q. Weinberger Cornell University Serge Belongie University of Copenhagen Vladl…

zabbix分布式2

nginx配置文件修改 #匹配连接次数 curl -s http://127.0.0.1/nginx_status | awk /Active/ {print $3} which curl 查看命令路径 nginx性能监控脚本 nginx_active() { /usr/bin/curl -s http://127.0.0.1/nginx_status | awk /Active/ {print $NF} #$NF最后一个 } nginx_rea…

Keithley吉时利2450源表技术参数

Keithley SMU 2450源表,吉时利2450:Keithley 的触摸屏图形源测量单元仪器可带来直观的测试平台体验,满足电源和测量需求。应用:离散设备、组件、FET、二管、电阻、电池、电源管理 IC、太阳能电池、LED、纳米材料、有机材料等。 Keithley吉时…

如何在华为OD机试中获得满分?Java实现【数字颠倒】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

中华人民共和国档案法

中华人民共和国档案法 (1987年9月5日第六届全国人民代表大会常务委员会第二十二次会议通过 根据1996年7月5日第八届全国人民代表大会常务委员会第二十次会议《关于修改〈中华人民共和国档案法〉的决定》第一次修正 根据2016年11月7日第十二届全国人民代表大会常务…

5年测试老鸟整理,功能自动化测试入门到实践,超细总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

《汇编语言》- 读书笔记 - 第6章- 包含多个段的程序

《汇编语言》- 读书笔记 - 第6章- 包含多个段的程序 6.1 在代码段中使用数据程序 6.1程序 6.2 6.2 在代码段中使用栈6.3 将数据、代码、栈放入不同的段程序 6.4 实验 5 编写、调试具有多个段的程序 应该将数据、代码、栈放进不同的段中。 程序在加载和运行时都可以向系统申请内…

美团端侧CDN容灾解决方案

1. 前言 作为业务研发,你是否遇到过因为 CDN 问题导致的业务图片加载失败,页面打开缓慢,页面布局错乱或者页面白屏?你是否又遇到过某些区域 CDN 域名异常导致业务停摆,客诉不断,此时的你一脸茫然&#xff…

javaWebssh服装租赁店信息管理系统台myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh服装租赁店信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要 采用B/S模式开发。开发环境为TO…

C++第一章:开始

开始目录 引言一、开发环境和参考书籍二、一个简单的C程序三、初识输入和输出标准输入输出对象 四、注释五、控制流while循环for循环 六、数量不定数据的输入七、C 缩进和格式八、类简介使用一个类书店处理书籍信息程序 九、术语表 引言 C在人们的眼中通常是“复杂”一词的代表…

软考高级架构师笔记-4中间件、嵌入式技术

目录 1. 前言 & 考情分析2. 中间件3. 微处理器4. 嵌入式软件5. 嵌入式系统6. 嵌入式软件设计6. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔记-2计算机软件(操作系统)软考高级架构师笔记-3数据库本章考情: 本章节偶尔会考到…