当前位置: 首页 > news >正文

十一:java web(3)-- Spring框架 -- Spring简介

目录

1. Servlet 与 Spring 的关系

2. Spring 框架介绍

Spring 框架的起源与发展

Spring 框架的核心特性

Spring 主要模块介绍

核心模块(Core Container)

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

Web 模块(Web)

AOP 模块(Aspect Oriented Programming)

测试模块(Test)

Spring 框架的优势与应用场景 


  •  从现在开始 都是工作中用的东西了

1. Servlet 与 Spring 的关系

Servlet 是 Spring MVC 的基础:Spring MVC 是构建在 Servlet 之上的一个 Web 框架,它使用了 Servlet 来处理 HTTP 请求。Spring MVC 中的 DispatcherServlet 本质上是一个 Servlet,它拦截所有请求,然后根据配置和注解,分发到不同的控制器(Controller)。

简化 Servlet 开发:Spring 提供了对 Servlet 的高层封装,使开发者可以专注于业务逻辑,而不用处理 Servlet API 级别的细节。Spring MVC 提供了注解式的请求映射和依赖注入等功能,极大地简化了 Web 应用的开发流程。

统一管理 Bean:Spring 通过 IOC 容器统一管理 Bean,包括 Servlet 和其他组件,简化了应用配置,增加了可扩展性。

2. Spring 框架介绍

  1. Spring 框架的起源与发展

    Spring 框架由 Rod Johnson 在 2002 年首次发布,起初是为了解决 Java EE 企业开发中的复杂性问题。Rod Johnson 在其书《Expert One-on-One J2EE Design and Development》中提出了简化 Java 企业级开发的理念,并提供了开源框架 Spring 的早期版本。Spring 的发布为开发者带来了轻量级的替代方案,使企业级 Java 开发更具模块化和灵活性。

    随着时间的推移,Spring 不断增加新特性和模块,支持更广泛的企业级应用需求。从早期的 IOC(控制反转)和 AOP(面向切面编程)到后来的 Spring MVC、Spring Data、Spring Security 等模块,Spring 成为一个强大的 Java 企业应用开发框架。后来,Spring Boot 和 Spring Cloud 的发布更进一步推动了 Spring 的流行,特别是在微服务架构和云原生应用开发中,Spring 成为主流选择。

    1. 一定要把 Servlet 当作基础概念来学习,而不必直接用它实现具体方案,因为它已逐渐被更高层的框架所取代。

  2. Spring 框架的核心特性

    1. IOC(控制反转):通过依赖注入(DI),Spring 管理对象的依赖关系,使对象之间解耦,从而更易于测试和扩展。

    2. AOP(面向切面编程):Spring 支持 AOP,可以将日志、事务等横切关注点与业务逻辑分离,提升代码的可维护性。

    3. 事务管理:Spring 提供声明式事务管理,无需手动编写事务代码,也支持复杂的分布式事务管理。

    4. 丰富的模块化设计:Spring 包含多个功能模块(如 Spring MVC、Spring Data、Spring Security 等),能够满足各类企业应用开发需求。

    5. 高可扩展性和集成性:Spring 可以与多种数据访问技术、消息中间件、Web 服务和其他框架(如 Hibernate、MyBatis)集成。

    6. 轻量级和非侵入性:Spring 对 Java 类无特殊要求,几乎不会干扰应用原有代码结构,因此迁移和升级相对容易。

  3. Spring 主要模块介绍

    • Spring 框架包含多个模块,开发者可以根据需求选择性地使用。

    • 核心模块(Core Container)
      • 核心容器模块是 Spring 的基础,包含支持依赖注入(DI)和控制反转(IOC)的功能。

      • Spring Core:提供依赖注入机制,核心类如 BeanFactoryApplicationContext

      • Spring Context:基于 Spring Core 提供了更高级的 IOC 容器功能,例如国际化、事件传播、资源管理等。

      • Spring Expression Language(SpEL):允许在 XML 配置或注解中使用表达式,对运行时值进行操作。

    • 数据访问与集成模块(Data Access/Integration)
      • JDBC:简化了 Java 数据库连接的编程,提供 JdbcTemplate 等工具类处理数据操作。

      • ORM:支持与 ORM 框架的集成(如 Hibernate、JPA、MyBatis),提供事务管理和一致的编程接口。

      • 事务管理:提供声明式事务和编程式事务管理,简化分布式和单体事务处理。

      • 消息传递(Messaging):支持 JMS、AMQP(如 RabbitMQ)等消息传递技术,用于系统内部和系统间消息交互。

    • Web 模块(Web)
      • ​​​​​​​Spring Web 模块专注于构建 Web 应用,特别是基于 Servlet 的应用。

      • Spring MVC:提供一个强大的 MVC 框架,使用 DispatcherServlet 处理请求,通过注解配置控制器、视图和模型绑定。

      • WebSocket:支持 WebSocket 通信,用于实时 Web 应用开发。

    • AOP 模块(Aspect Oriented Programming)
      • ​​​​​​​​​​​​​​Spring 的 AOP 模块使开发者可以把日志记录、事务管理等横切关注点从业务逻辑中分离出来。

      • AOP 支持:支持声明式 AOP,通过注解和 XML 配置定义切入点和通知。

      • AspectJ 集成:支持使用 AspectJ 编写 AOP 切面,AspectJ 是 Java 中功能丰富的 AOP 框架。

    • 测试模块(Test)
      • ​​​​​​​​​​​​​​Spring Test 模块提供了丰富的测试支持,便于开发者对 Spring 应用进行单元测试和集成测试。

      • 单元测试支持:支持通过 @ContextConfiguration 加载 Spring 配置,简化基于 Spring 的单元测试。

      • Mock 测试工具:提供 MockMvc,用于模拟 HTTP 请求,测试 Web 层控制器。

      • 集成测试:支持通过 @SpringBootTest 在 Spring Boot 项目中进行完整的集成测试。

  4. Spring 框架的优势与应用场景 

    • 优势

      • 高度解耦:IOC 和 DI 使得类之间解耦,业务代码的逻辑与配置分离。

      • 可扩展性强:Spring 提供丰富的配置方式(XML、注解、Java 配置类),灵活且易扩展。

      • 横切关注点管理:通过 AOP 简化了日志记录、事务管理、权限控制等横切关注点的处理。

      • 丰富的生态系统:包括 Spring Boot、Spring Data、Spring Security 等模块,可以构建各种规模的应用。

      • 高兼容性:与主流技术和框架(如 JPA、MyBatis、Hibernate)无缝集成,能够在现有项目中逐步采用 Spring。

    • 应用场景

      • 传统单体应用:Spring 是单体应用开发的理想选择,能有效管理复杂的业务逻辑和数据交互。

      • 微服务架构:使用 Spring Boot 和 Spring Cloud,可以快速构建和管理微服务系统。

      • RESTful API 开发:Spring MVC 提供强大的 REST 支持,使开发 RESTful 接口便捷。

      • 响应式编程:通过 WebFlux,适合高并发、低延迟的实时应用,如在线聊天、股票行情推送等场景。

相关文章:

十一:java web(3)-- Spring框架 -- Spring简介

目录 1. Servlet 与 Spring 的关系 2. Spring 框架介绍 Spring 框架的起源与发展 Spring 框架的核心特性 Spring 主要模块介绍 核心模块(Core Container) 数据访问与集成模块(Data Access/Integration) Web 模块&#xff0…...

ts 如何配置引入 json 文件

ts 如何配置引入 json 文件 参考文档: https://maxgadget.dev/article/how-to-import-a-json-file-in-typescript-a-comprehensive-guide 项目中有一个 .json 的文件是配置文件,如何引入到 ts 项目中 配置 tsconfig.json 文件,添加这两个 {…...

LeetCode面试经典150题C++实现,更新中

用C实现下面网址的题目 https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 1、数组\字符串 88合并两个有序数组 以下是使用 C 实现合并两个有序数组的代码及测试用例 C代码实现 #include <iostream> #include &l…...

基于springboot的家装平台设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…...

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中&#xff0c;客户总是希望你的配色是美的&#xff0c;但是美如何定义&#xff…...

Parallax.js:让智能设备视差效果更智能、更自然

今天给大家分享一款功能非常强大的javascript视觉差特效引擎插件&#xff1a;Parallax.js。 Parallax.js简介 Parallax.js是一个简单的&#xff0c;轻量级的视差引擎。你可以将它作为作为jQuery或Zepto插件来使用&#xff0c;也可以以纯JS的方式来使用。 最-最-最厉害的是它…...

一文熟悉新版llama.cpp使用并本地部署LLAMA

0. 简介 最近是快到双十一了再给大家上点干货。去年我们写了一个大模型的系列&#xff0c;经过一年&#xff0c;大模型的发展已经日新月异。这一次我们来看一下使用llama.cpp这个项目&#xff0c;其主要解决的是推理过程中的性能问题。主要有两点优化&#xff1a; llama.cpp …...

vue/react做多语言国际化的时候,在语言配置中不同的语言配置不同的字体,动态引入scss里面

如果想直接在vue文件的css里面使用&#xff0c;就可以使用i18n的t函数&#xff0c;注意t外层也有引号&#xff1a; font-size: v-bind("t(style.teamCurModelFontSize)"); 前提是要引入t函数&#xff1a;...

Unity——鼠标点击信息和当前位置获取

文章目录 前言一、应用场景二、实现方法1.获取鼠标在屏幕上的位置2.获取鼠标点击位置的世界坐标3.获取鼠标点击位置的UI元素总结前言 在Unity开发中,有时会需要我们获取一些鼠标的信息用于数据交互或者角色控制。 一、应用场景 交互式UI 按钮点击:检测用户是否点击了UI按钮,…...

vue 2的v-***关键字作用及使用场景

作为一个Vue 2的高级前端程序员&#xff0c;你需要熟悉Vue 2的所有指令&#xff08;Directives&#xff09;。以下是Vue 2中的指令及其详细说明&#xff1a; v-text 作用&#xff1a;更新元素的textContent。使用场景&#xff1a;当你需要将数据直接显示在页面上&#xff0c;且…...

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式&#xff0c;在…...

【Android】ubutun 创建Androidstudio桌面快捷方式

此方法不仅适合Androidstudio&#xff0c;其他应用的快捷方式创建同理。 创建桌面快捷方式 进入桌面 cd ~/Desktop创建.desktop文件 touch androidStudio.desktop编辑.desktop文件 [Desktop Entry] TypeApplication Terminalfalse NameAndroid Studio Comment android stu…...

javascript 流程控制,数组【知识点整理】

javascript JS 流程控制条件控制语句循环语句跳转语句&#xff1a;异常处理&#xff1a; JS 数组数组的方法 JS 流程控制 条件控制语句 if 语句&#xff1a;用于在满足特定条件时执行代码块。 if (condition) {// 如果条件为真&#xff0c;则执行代码块 }if…else 语句&#x…...

2.索引:SQL 性能分析详解

SQL性能分析是数据库优化中重要的一环。通过分析SQL的执行频率、慢查询日志、PROFILE工具以及EXPLAIN命令&#xff0c;能够帮助我们识别出数据库性能的瓶颈&#xff0c;并做出有效的优化措施。以下将详细讲解这几种常见的SQL性能分析工具和方法。 一、SQL 执行频率 SQL执行频率…...

Flink SQL

进入 JobManager 容器&#xff1a; docker exec -it 21442d9ca797 /bin/bash 启动 Flink 的 SQL 客户端&#xff1a; /opt/flink/bin/sql-client.sh embedded 尝试创建 Kafka 表&#xff1a; 在启动的 SQL 客户端中&#xff0c;尝试创建一个 Kafka 表&#xff0c;看看是否能…...

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问&#xff1a;您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么&#xff0c;还是需要通过其他方式来实现。 针对这位粉丝朋友的提问&#xff0c;我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…...

QT版发送邮件程序

简单的TCP邮箱程序 **教学与实践目的&#xff1a;**学会网络邮件发送的程序设计技术。 1.SMTP协议 邮件传输协议包括 SMTP&#xff08;简单邮件传输协议&#xff0c;RFC821&#xff09;及其扩充协议 MIME&#xff1b; 邮件接收协议包括 POP3 和功能更强大的 IMAP 协议。 服务…...

JavaSE:初识Java(学习笔记)

java是高级语言的面向对象语言 .[最贴近生活.最快速分析和设计程序] 一&#xff0c;计算机语言发展历史 二&#xff0c;Java体系结构 1&#xff0c;JavaSE&#xff08;Java Standard Edition&#xff09; 标准版&#xff0c;定位在个人计算机上的应用 这个版本是Jav…...

ClickHouse创建分布式表

ClickHouse创建分布式表 当数据量剧增的时候&#xff0c;clickhouse是采用分片的方式进行数据的存储的&#xff0c;类似于redis集群的实现方式。然后想进行统一的查询的时候&#xff0c;因为涉及到多个本地表&#xff0c;可以通过分布式表的方式来提供统一的入口。由于是涉及到…...

Flink转换算子

Apache Flink 是一个用于处理无界和有界数据的开源流处理框架。在 Flink 中&#xff0c;转换&#xff08;Transformation&#xff09;是数据流处理的核心组件之一&#xff0c;它们定义了如何从输入数据集生成输出数据集。以下是 Flink 中一些常见的转换算子&#xff1a; Map: 将…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...