当前位置: 首页 > 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: 将…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...