Spring框架总体结构

news2024/11/15 7:55:47

1. Spring是什么

  • Spring 是一个开源框架

  • Spring 为简化企业级应用开发而生,使用 Spring 可以使简单的 JavaBean实现以前只有 EJB 才能实现的功能

  • Spring 是一个 IOC(DI) 和 AOP 容器框架

具体描述 Spring

  • 轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
  • 依赖注入(DI --- dependency injection、IOC)
  • 面向切面编程(AOP --- aspect oriented programming)
  • 容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
  • 框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
  • 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上 Spring 自身也提供了展现层的 SpringMVC和 持久层的 Spring JDBC)

Spring的核心是控制反转(IOC)和面向切面(AOP)

2. Spring特点

  1. 方便解耦,简化开发:通过IOC容器,将对象之间的依赖关系交给Spring控制,避免编码过度耦合
  2. AOP编程的支持:面向切面编程,解决传统OOP难以解决的问题
  3. 声明式事物的支持
  4. 方便程序的测试:对Junit4的完美支持,方便通过注解@Test进行测试
  5. 方便整合集成各种优秀框架
  6. 降低Java EE API的使用难度
  7. 其源代码是经典学习案例

3. Spring 模块

alt

Spring 框架是一个分层架构,由 7 个定义良好的模块组成:

Core Container

核心容器由Spring - CoreSpring -beanSpring -contextSpring -context-supportSpring - Expression (Spring表达式语言)模块组成 。 spring-corespring-beans模块提供了框架的基本功能,包括IoC和依赖项注入特性。其主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转模式将程序的配置和依赖性规范与实际的应用程序代码分开

AOP

通过配置管理特性, spring-aop 模块直接将面向切面的编程功能集成到了 Spring 框架中

Aspects

独立的spring-aspects模块提供了与AspectJ的集成

Instrumentation

spring-instrument 模块提供了类检测支持和类加载器实现,以在某些应用程序服务器中使用 , spring-instrument-tomcat包含Tomcat的Spring检测代理

Messaging

spring-messaging 模块包含从 MessageMessageChannelMessageHandler 等其他基于消息的基础应用中得到的抽象。该模块还包含一系列的注解来讲消息映射到方法上,和SpringMVC注解类似

Data Access/Integration

数据访问/集成 由JDBC、ORM、OXM、JMS和 Transaction 模块组成

spring-jdbc提供JDBC抽象层 ,使我们从繁重的JDBC编程中解脱出来,并且不再需要为解析不同的数据库的异常而烦恼。

spring-tx支持对所有 POJO 和实现了特定接口的类进行编程式和申明式事务管理。

spring-orm整合了流行的 ORM 应用程序接口,包括JPA、JDO和Hibernate。使用该模块我们可以任意使用这些ORM框架和Spring的其他功能(如上面的申明式事务管理)进行组合。

spring-oxm为 OXM 的实现提供抽象层,如 JAXB、Castor、XMLBeans、JiBX 和XStream。

spring-jms 是Java消息服务,包含产生和接受消息 。Spring Framework 4.1将它并入在spring-messaging 模块。

Web

Web层由spring-webspring-webmvcspring-websocketspring-webmvc-portlet 模块组成

spring-web 包含基本的面向网络的集成特性,如文件分部上传,使用Servet监听器和面向网络的应用上下文初始化IoC容器。他还包括 HTTP 客户端和网络相关的 Spring远程支持。

spring-webmvc 也被成为 Web-Servlet 模块,包含Spring的模型-视图-控制器(model-view-controller,MVC) 和 REST Web Services。 Spring MVC 框架是得实体模型代码和网络表单清楚地分离开来,还可以轻松集成Spring框架的其他特性。

spring-webmvc-portlet 也被称为 Web-Portlet 模块,在Portlet 容器中实现MVC,并且能使用spring-webmvc 模块的功能

Test

spring -test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试

《Spring 揭秘》中的Spring框架总体结构

alt

官方文档: https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/

本文由 mdnice 多平台发布

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

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

相关文章

【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享

2024年华为杯研赛B题解题思路 B题 WLAN组网中网络吞吐量建模 问题1 请根据附件WLAN网络实测训练集中所提供的网络拓扑、业务流量、门限、节点间RSSI的测试基本信息,分析其中各参数对AP发送机会的影响,并给出影响性强弱的顺序。通过训练的模型&#xff…

撤销与恢复的奥秘:设计模式之备忘录模式详解

备忘录模式 🎯 备忘录模式(Memento Pattern)简介 备忘录模式 是一种行为型设计模式,用于保存对象的某一时刻状态,以便稍后可以恢复到该状态,而不破坏对象的封装性。备忘录模式将对象的状态封装在一个独立的…

技术周总结 09.16~09.22 周日(架构 C# 数据库)

文章目录 一、09.16 周一1.1)问题01: 软件质量属性中"质量属性场景"、"质量属性环境分析"、"质量属性效用树"、"质量属性需求用例分析"分别是什么?1.2)问题02: 软件质量属性中…

机器学习(1)sklearn的介绍和六个主要模块、估计器、模型持久化

文章目录 1.sklearn介绍2.sklearn的模块3.监督学习和无监督学习1. 监督学习 (Supervised Learning)例子 2. 无监督学习 (Unsupervised Learning)例子 4.估计器估计器的主要特性和方法包括:估计器的类型:示例:使用 scikit-learn 中的估计器 5.…

用最通俗易懂的语言和例子讲解三维点云

前言: 我整体的学习顺序是看的按B站那“唯一”的三维点云的视频学习的(翻了好久几乎没有第二个...)对于深度学习部分,由于本人并没有进行学习,所以没有深究。大多数内容都进行了自己的理解并找了很多网络的资源方便理解…

JavaScript可视化示例

JavaScript 可视化是指使用 JavaScript 编程语言来创建和操作图形、图表、动画等视觉元素的过程。以下是一些常见的 JavaScript 可视化库和工具,以及它们的主要特点: 1. D3.js 特点: D3.js(Data-Driven Documents)是一个非常强大…

MySQL高阶之存储过程

什么是存储过程? 存储过程可称为过程化SQL语言,是在普通SQL语句的基础上增加了编程语言的特点,把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中,通过逻辑判断、循环等操作实现复杂计算的程序语言。 换句话说,存储过程其实…

Linux常用命令 笔记

Linux常用指令 查看命令ls 列出指定路径下的文件和目录cd 切换目录绝对路径相对路径 pwd 查看当前路径的绝对路径touch 创建空文件cat 显示文件内容echo 显示内容 & 写入文件vim 文本编辑器打开文件编辑文件保存退出 mkdir 创建目录rm 删除文件&目录删除文件删除目录 定…

java重点学习-设计模式

十三 设计模式 工厂模式:spring中使用(目的是:解耦) 1.简单工厂 所有的产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则是一种编程习惯,可以借鉴这种编程思路 2.工厂方…

分布式锁优化之 防死锁 及 过期时间的原子性保证(优化之设置锁的过期时间)

文章目录 1、AlbumInfoApiController --》testLock()2、AlbumInfoServiceImpl --》testLock()3、问题:可能会释放其他服务器的锁。 在Redis中设置一个名为lock的键,值为111,并且只有在该键不存在时才设置(即获取锁)。同…

为解决bypy大文件上传报错—获取百度云文件直链并使用Aria2上传文件至服务器

问题描述 一方面组内的服务器的带宽比较小,另一方面使用bypy方式进行大文件(大于15G)上传时会报错(虽然有时可以成功上传,但是不稳定): 解决方式 总体思路: 获得云盘需要下载文件的直链复制直链到服务器中使用自带…

Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记 官方学习网站在这获取: https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自动化环境配置 (推荐靠谱的博客文章来进行环境配置,具…

OpenCV运动分析和目标跟踪(3)计算图像序列的加权平均值函数accumulateWeighted()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 更新一个运行平均值。 该函数计算输入图像 src 和累积器 dst 的加权和,使得 dst 成为帧序列的运行平均值: dst ( x , y…

CANopen通讯协议笔记

CANopen通讯协议笔记 CANopen 通信对象编号CANopen整体框架网络管理(NMT)主要任务上线报文心跳报文过程数据对象(PDO)SDO服务数据对象对象字典概述 CANopen 通信对象编号 CANopen报文传输采用 CAN 标准帧格式。 这里的CAN-ID也叫…

ARM(Day 2)

一、作业 (1)汇编代码 .text.globl _start_start:mov r0, #0x5mov r1, #0x10比较r0,r1 是否相等 相等执行stop 不相等执行下一步比较( r0 > r1 ?)cmp r0, r1 比较实际在做减法 (YES NO )subhi r0, r0, r1 r0 > r1 …

浅谈Spring Cloud:OpenFeign

RestTemplate 方式调用存在的问题: String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class); 这是通过URL地址来访问的。但是: 代码可读性差,编程体验不统一参数复…

NCNN 源码(1)-模型加载-数据预处理-模型推理

参考 ncnn 第一个版本的代码。 0 整体流程 demo:squeezenet ncnn 自带的一个经典 demo:squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…

对象关系映射ORM

目录 ORM【重要】 1、 什么是ORM 2、 实体类 3、 ORM改造登录案例 ORM【重要】 1、 什么是ORM 目前使用JDBC完成了CRUD,但是现在是进行CRUD,增删改方法要设计很多参数,查询的方法需要设计集合才能返回. 在实际开发中,我们需要将零散的数据封装到对象处理. ORM (Object Rela…

在曲线图上最值和极值点位置进行适当标注

1、首先生成一组0-100的随机数,组内共有100个数据; yyrandi([0,100],[1,100]); 2、求这组数据的功率谱密度,并绘图; msize(yy,2); xdft fft(yy); % 计算功率谱密度 psd (1/m) * abs(xdft).^2; x1:m; loglog(x,psd,Linewid…

恶意windows程序

Lab07-01.exe分析(DOS攻击) 1.当计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)? 创建Malservice服务实现持久化 先分析sub_401040桉函数 尝试获取名为HGL345互斥量句柄,如果不存在则直接结束流程;如果存…