01 - 初识 Spring

news2024/12/27 8:35:40

初识Spring

企业级应用

企业级应用是指那些为商业组织、⼤型企业而创建并部署的解决⽅案及应用。这些⼤型的企业级应用结构复

杂、涉及的外部资源众多,事务密集,数据规模⼤,用户数量多,有较强的安全性考虑和较⾼的性能要求。

当代的企业级应用绝不可能是⼀个个的独⽴系统。在企业中⼀般都会部署多个进⾏交互的应用。同时,这些应

用⼜都有可能与其他企业的相关应用连接。从而构成⼀个结构复杂,跨越Internet的分布式企业应用集群。

此外,作为企业级应用不但要有强⼤的功能。还要能够满⾜未来业务需求的变化,易于扩展和维护。

传统 Java EE 解决企业级应用问题时的"重量级"架构体系,使它的开发效率,开发难度和实际的性能,都令⼈

失望,Spring 以⼀个"救世主"的形象出现在⼴⼤的Java程序员⾯前。

Spring概述

Spring是什么

Spring 是最受欢迎的企业级 Java 应⽤程序开发框架,数以百万的来⾃世界各地的开发⼈员使⽤ Spring 框架来创建性能好、易于测试、可重⽤的代码。

Spring 框架是⼀个开源的 Java 平台,它最初是由 Rod Johnson(Spring之⽗) 编写的,并且于 2003 年 6 ⽉⾸次在 Apache 2.0 许可下发布。

Spring 是轻量级的框架,其基础版本只有 2 MB 左右的⼤⼩。

Spring 框架的核⼼特性是可以⽤于开发任何 Java 应⽤程序,但是在 Java EE 平台上构建 web 应⽤程序是需要扩展的。 Spring 框架的⽬标是使 Java EE 开发变得更容易使⽤,通过启⽤基于 POJO 编程模型来促进良好的编程实

践。

Spring致⼒于 JavaEE 应⽤的各种解决⽅案。⽽不是仅仅专注于某⼀层的⽅案。可以说,spring是企业应⽤开发的⼀站式选择。Spring贯穿表现层,业务层,持久层。然⽽,spring并不想取代那些已有的框架。⽽是以⾼度的开放性与他们⽆缝整合。

Spring有两个主要⽬标:⼀是让现有技术更易于使⽤,⼆是促进良好的编程习惯(最佳实践)

Spring的优势

1. 轻量级框架

Spring是⼀个轻量级框架,⼤⼤的简化了Java企业级开发。提供了强⼤、稳定的功能。

Spring是⼀个全⾯的解决⽅案,已经有较好解决⽅案的领域,Spring绝不做重复性的实现,例如:对象持久化和 ORM ,Spring只是对现有的 JDBC , MyBatis , Hibernate 等技术提供⽀持,使之更加易⽤,⽽不是重新做⼀个实现。

2. ⽅便解耦,简化开发

通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进⾏控制,避免硬编码所造成的过度程序耦合。⽤户也不必再为单例模式类、属性⽂件解析等这些底层的需求编写代码,可以更专注于上层的应⽤。

3. AOP 编程的⽀持

通过 Spring 的 AOP 功能,⽅便进⾏⾯向切⾯的编程,许多不容易⽤传统 OOP 实现的功能可以通过 AOP 轻

松应付。

4. 声明式事务的⽀持

可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活的进⾏事务的管理,提⾼开发效率和质量。

5. ⽅便程序的测试

可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作,测试不再是昂贵的操作,⽽是随⼿可做的事情。

6. ⽅便集成各种优秀框架

Spring 可以降低各种框架的使⽤难度,提供了对各种优秀框架( Struts、 Hibernate、 Hessian、 Quartz

等)的直接⽀持。

7. 降低 JavaEE API 的使⽤难度

Spring 对 JavaEE API (如 JDBC 、 JavaMail 、 远程调⽤ 等)进⾏了薄薄的封装层,使这些 API 的使⽤难度⼤为降低。

8. Java 源码是经典学习范例

Spring 的源代码设计精妙、结构清晰、匠⼼独⽤,处处体现着⼤师对 Java 设计模式灵活运⽤以及对 Java 技术的⾼深造诣。它的源代码⽆意是 Java 技术的最佳实践的范例。

Spring的体系结构

Spring 框架由⼤约20个功能模块组成。这些模块被分为六个部分。分别是 Core Container , Data

Access/Integration , Web , AOP , Instrumentation 及 Test 。

Core Container(Spring的核心容器)

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

Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。

Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。

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

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

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

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

JDBC 模块:提供了一个 JDBC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。

ORM 模块:提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。

OXM 模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。

JMS 模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

Transactions 事务模块:支持编程和声明式事务管理。

Web模块

Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Webflux 组件,具体介绍如下。

Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。

Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。

WebSocket 模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。

Webflux 模块: Spring WebFlux 是 Spring Framework 5.x中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。Spring WebFlux 用于创建基于事件循环执行模型的完全异步且非阻塞的应用程序。

此外Spring4.x中还有Portlet 模块,在Spring 5.x中已经移除

Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。

AOP、Aspects、Instrumentation和Messaging

在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:

AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。

Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。

Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

jcl 模块: Spring 5.x中新增了日志框架集成的模块。

Test模块

Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

包含Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。

Spring 的官方项目和教程

官方的项目和教程,地址在这里在新窗口打开,在学习Spring时,一定要把它当做生态体系,而是不是一个简单的开发框架。

Spring 的归档文档

官方提供了系统性的文档的FTP,你可以在这里在新窗口打开找到所有历史版本的PDF/HTML版本。

Spring 的官方Github

Spring官方的GitHub在这里在新窗口打开,它包含着Spring-framework的源码,如果你感兴趣,可以从这里clone代码进行阅读。

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

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

相关文章

NLP 中文拼写检测纠正论文-04-Learning from the Dictionary

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

【CSS in Depth 2 精译_091】15.4:让 CSS 高度值过渡到自动高度 + 15.5:自定义属性的过渡设置(全新)+ 15.6:本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 15 章 过渡】 ✔️ 15.1 状态间的由此及彼15.2 定时函数 15.2.1 定制贝塞尔曲线15.2.2 阶跃 15.3 非动画属性 15.3.1 不可添加动画效果的属性15.3.2 淡入与淡出 15.4 过…

PMP项目管理考试模拟真题及答案(中文版)

1、赶工一个任务时,你应该关注: A 尽可能多的任务。 B 非关键任务。 C 加速执行关键路径上的任务。 D通过成本最低化加速执行任务。 正确答案:C 2、“在对软件编码前我不能进行软件测试。”这句话说明了哪种依赖关系? A 随意的 B软逻辑关系 C 优先 D 强制…

CentOS7下的vsftpd服务器和客户端

目录 1、安装vsftpd服务器和ftp客户端; 2、配置vsftpd服务器,允许普通用户登录、下载、上传文件; 3、配置vsftpd服务器,允许anonymous用户登录、下载、上传文件; 4、配置vsftpd服务器,允许root用户登录…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin ​ 根据前面内容,所有的子任务已经基本结束,接下来就是调用转化的bin模型进行最后的逻辑控制了 1 .YOLO的bin使用 ​ 对于yolo其实有个简单的办法,也…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾:高度(也称深度) 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

STM32学习(一)

STM32是什么 STM32是意法半导体(ST)公司基于ARM Cortex-M内核开发的32位微控制器‌。他的名字是由;意大利SGS&法国Thomson共同研制的,中国人民取两家公司名称的首字母于是ST就是这样来的,M是单片机M-Micro Contro…

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器,方便程序代码及文档版本管理。 官网:http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…

音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现

一、引言 通过FFmpeg命令可以获取到TS文件/TS流的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数、音频码率信息: ./ffmpeg -i XXX.ts 本文以音频为AAC为例讲述FFmpeg到底是从哪个地方获取到这些音频信息的。 二、音频压缩编码格式 FFmpeg获取…

中伟视界:电话、短信怎么在矿山智能分析平台中的报警等级管理中分级通知到相关人员

在现代矿山安全管理中,通讯报警系统的有效性不可忽视,智慧矿山的融合通信与AI智能预警的联动,已经成为矿山智能化的一个发展方向。随着科技的发展,矿山智能分析平台越来越受到企业的青睐,通过对报警信息的分级管理&…

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素:宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算:码率(kbps)=文件大小(KB)*8/时间(秒),即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV(原始数据&am…

论文研读:AnimateDiff—通过微调SD,用图片生成动画

1.概述 AnimateDiff 设计了3个模块来微调通用的文生图Stable Diffusion预训练模型, 以较低的消耗实现图片到动画生成。 论文名:AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 三大模块: 视频域适应…

百度地图绘制行政区域及设置中心点

// 画行政区 const drwaDistrict (disList, clear true) > {clear && clearOverlays();if (!bMapGL.value) return;let bd new bMapGL.value.Boundary();disList.map((item) > {bd.get(item, function (rs1) {// rs1 是行政区对应的点集合 此处非每次必反信息…

jetson Orin nx + yolov8 TensorRT 加速量化 环境配置

参考【Jetson】Jetson Orin NX纯系统配置环境-CSDN博客 一 系统环境配置: 1.更换源: sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list2.更新源: sudo apt upgradesudo apt updatesudo apt dist-upgrade sudo apt-get updat…

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试 一、打开设备管理器看主机(Window系统)是否识别出串口,我这边显示的串行通信端口是COM3 二、打开VirtualBox,设置串口和USB设备 串口设置: 启用…

Python 自动化 打开网站 填表登陆 例子

图样 简价: 简要说明这个程序的功能: 1. **基本功能**: - 自动打开网站 - 自动填写登录信息(号、公司名称、密码) - 显示半透明状态窗口实时提示操作进度 2. **操作流程**: - 打开网站后自动…

本原多项式

将 G F ( p ) GF(p) GF(p)延伸为有 p m p^m pm个元素的域,称之为 G F ( p ) GF(p) GF(p)的扩域,表示为 G F ( p m ) GF(p^m) GF(pm). G F ( p ) GF(p) GF(p)是 G F ( p m ) GF(p^m) GF(pm)的子集。 G F ( p m ) GF(p^m) GF(pm)元素个数为 p m p^m pm。 …

【物联网技术与应用】实验15:电位器传感器实验

实验15 电位器传感器实验 【实验介绍】 电位器可以帮助控制Arduino板上的LED闪烁的时间间隔。 【实验组件】 ● Arduino Uno主板* 1 ● 电位器模块* 1 ● USB电缆*1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 模拟电位器是模拟电子元件,模…

能省一点是一点 - 享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) 享元模式(Flyweight Pattern)享元模式(Flyweight Pattern)概述享元模式包含的角色:享元模式应用场景 talk is cheap, show you my code总结 享元模式&a…

学习C++:变量

变量: 作用:给一段指定的内存空间起名,方便操作这段内容 (变量存在的意义:方便我们管理内存空间) 语法:数据类型 变量名 初始值; 实例: