Spring (17)Spring Boot和Spring MVC区别

Spring MVC 和 Spring Boot 都是 Spring 框架的一部分,但他们解决的问题和使用的方式有显著的不同。以下是两者的详细对比:

Spring MVC(Spring Web MVC Framework)

Spring MVC 是建立在 Spring Framework 上的原始 Web 框架。它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架。Spring MVC 提供了一种分离关注点的方式,允许开发者创建具有清晰层次分离的应用程序(控制器、服务、数据访问对象(DAO)、模型对象和视图解析器)。

一个典型的 Spring MVC 控制器可能看起来像这样:

@Controller
@RequestMapping("/greetings")
public class GreetingController {@GetMapping("/{name}")public String greet(@PathVariable String name, Model model) {model.addAttribute("name", name);return "greeting"; // 视图名称,用于渲染}
}

Spring MVC 需要配置一堆支持功能,比如视图解析器、消息转换器、资源处理等。在没有 Spring Boot 的情况下,这些通常需要手动配置,例如在 XML 文件或通过使用 @Configuration 注解的 Java 配置类。

Spring Boot

Spring Boot 是一个依赖于Spring框架的,旨在简化Spring应用的初始化和开发过程的项目。Spring Boot 通过自动配置和启动器(Starter)依赖项的概念,使得项目的引导过程更快、配置更少。Spring Boot 本质上不是用来替代 Spring MVC 的,而是用来简化 Spring 应用程序,包括 web 应用程序的搭建和开发流程。

Spring Boot 通过内嵌容器(如 Tomcat、Jetty 或 Undertow)、自动配置、健康检查、外部化配置等特性,提供了一种生产就绪(production-ready)的方式。它让你可以创建一个独立的、可立即运行的应用程序。

使用 Spring Boot 启动器 spring-boot-starter-web,你可以快速地创建一个 Spring MVC 应用,但无需手动进行大量配置。以下是一个使用 Spring Boot 的 Spring MVC 控制器示例:

@SpringBootApplication
public class ExampleApplication {public static void main(String[] args) {SpringApplication.run(ExampleApplication.class, args);}@Controller@RequestMapping("/greetings")static class GreetingController {@GetMapping("/{name}")public String greet(@PathVariable String name, Model model) {model.addAttribute("name", name);return "greeting"; // 视图名称,用于渲染}}
}

在上面的例子中,@SpringBootApplication 是一个便捷注解,它包含了 @Configuration@EnableAutoConfiguration@ComponentScan。这意味着 Spring Boot 会自动扫描同级包和子包中的组件,应用自动配置,并读取配置类。

Spring Boot 的自动配置

Spring Boot 自动配置试图根据你添加的依赖和你的应用程序类路径来自动配置你的 Spring 应用。它查看类路径上的类、定义的 bean,以及各种属性设置。

以下是 WebMvcAutoConfiguration 中部分源码的一个例子,这展示了 Spring Boot 是如何配置 Spring MVC 项目的:

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
// ...其他条件注解
public class WebMvcAutoConfiguration {// ... 自动配置的 Bean 和方法
}

在这里,@ConditionalOnWebApplication@ConditionalOnClass 等条件注解确保只有当应用是一个 Web 应用程序并且类路径上存在特定的类时,相应的配置才会被激活。

总结

Spring MVC 是一个 Web 框架,用于构建 Web 应用程序;而 Spring Boot 是一个依赖于 Spring 的工具,用于简化 Spring 应用程序的配置和部署过程。Spring Boot 使用 Spring MVC 作为 Web 层的构建块,并提供了自动配置和其他特性,以简化 Spring MVC 应用程序的开发和运行。简而言之,Spring MVC 关注于 Web 应用程序的构建,而 Spring Boot 关注于简化使用 Spring 框架的整个过程。

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

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

相关文章

全栈安全 为云而生 | 亚信安全信舱ForCloud全新品牌重磅发布

5月18日,亚信安全云安全全新品牌ForCloud正式发布。基于“全栈安全 为云而生”的创新理念,亚信安全云安全完成全新、全面、全栈升级。ForCloud的发布仪式在C3安全大会“云领未来:全栈一体化”云安全论坛上隆重举办,同时亚信安全还…

深度学习之基于Tensorflow识别人脸表情及情绪

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸表情及情绪识别是计算机视觉领域的一个重要研究方向,它在人机交互、情感计算、…

Microsoft.NET 框架程序设计 —— 通用对象操作

对象的等值性与惟一性 如前所述,System.Obiect类型提供了一个名为Equals 的虚方法,其目的为判断两个对象是否有着相同的“值”。微软的.NET框架类库(FCL)中包括的许多方法(例如 System.Array的IndexOf方法System.Collections.ArrayList的 Contains 方法)在内部都调用到了 Equ…

C++贪心算法(2)

最大子矩阵 #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int a[110][110]{0};int b[110][110]{0};for(int i1;i<n;i){for(int j1;j<n;j){cin>>a[i][j];if(i1&&j1){b[i][j]b[i][j-1]a[i][j];}else{b[i][j]b[i][j-1]…

接口使用实例——数组排序

对于基本数据类型的大小比较&#xff0c;我们可以使用<,>,或者equals方法进行比较&#xff0c;但是对象之间如何进行比较呢&#xff1f;要对对象进行比较&#xff0c;我们必须对同一个成员变量进行比较&#xff0c;如我们可以通过比较name的大小来得出两个对象的大小&…

python-数据可视化

python-数据可视化 ** 数据可视化指的是通过可视化表示来探索数据&#xff0c;它与数据挖掘**紧密相关&#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表&#xff0c;也可以是数以吉字节的数据 最流行的工具之一…

【一步一步了解Java系列】:何为数组,何为引用类型

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 数组 数组是一推相同数据…

数据迁移利器登场!Elasticdumpv6.110震撼发布,助你轻松搬迁大数据!

简介 Elasticdump 是一个用于导出和导入 Elasticsearch 数据的工具。它能够从一个 Elasticsearch 集群读取数据并写入到另一个 Elasticsearch 集群、文件系统或其他数据存储&#xff08;例如 S3&#xff09;。这个工具非常有用&#xff0c;特别是在进行数据迁移、备份和恢复操作…

2024年学浪视频怎么下载到手机相册

随着2024年的到来&#xff0c;学浪平台继续为广大学习者提供优质的在线教育资源。然而&#xff0c;如何将这些宝贵的视频内容下载到手机相册&#xff0c;方便随时离线观看呢&#xff1f;无论您是想在旅途中学习&#xff0c;还是希望在没有网络的情况下复习课程&#xff0c;本文…

1106 2019数列

solution 维护长度为4的数组&#xff0c;对于第四位之后的数字&#xff0c;为所维护数组的所有元素之和 的个位数 #include<iostream> using namespace std; int main(){int n, a[4] {2, 0, 1, 9}, cnt 0, d;scanf("%d", &n);for(int i 0; i < n; …

kettle从入门到精通 第六十三课 ETL之kettle kettle调用python脚本的两种方法

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群&#xff0c;一起学习&#xff0c;共同进步。若二维码失效&#xff0c;公众号后台加我微信入群&#xff0c;备注kettle。 kettle中不能直接调用python脚本&#xff0c;可以通过shell脚本和http进行调用pyton服务。 一、shel…

深入理解Java的垃圾回收机制(GC)实现原理

深入理解Java的垃圾回收机制&#xff08;GC&#xff09;实现原理 Java的垃圾回收机制&#xff08;Garbage Collection, GC&#xff09;是其内存管理的核心功能之一。通过GC&#xff0c;Java自动管理对象的生命周期&#xff0c;回收不再使用的对象所占的内存空间。本文将详细探…

Golang | Leetcode Golang题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; func isInterleave(s1 string, s2 string, s3 string) bool {n, m, t : len(s1), len(s2), len(s3)if (n m) ! t {return false}f : make([]bool, m 1)f[0] truefor i : 0; i < n; i {for j : 0; j < m; j {p : i j - 1if i >…

C++的数据结构(十八):并查集

并查集&#xff08;Union-Find&#xff09;是一种用于处理一些不交集&#xff08;Disjoint Sets&#xff09;问题的数据结构。它主要支持两种操作&#xff1a;合并集合&#xff08;Union&#xff09;和查找元素所属集合&#xff08;Find&#xff09;。在解决诸如连通性问题、网…

牛客小白月赛94( 6 / 6 )

小苯的九宫格 #include<bits/stdc.h> using namespace std; map<int,int>mp; void solve(){for(int i1;i<9;i){int x;cin>>x;mp[i]x;}string s;cin>>s;for(auto i:s){cout<<mp[i-0];} } int main(){ios::sync_with_stdio(false), cin.tie(0)…

Ruoyi框架学习——权限管理

权限分类 菜单权限&#xff1a;用户登录系统之后能看到哪些菜单按钮权限&#xff1a;用户在一个页面上能看到哪些按钮&#xff0c;比如新增、删除等按钮接口权限&#xff1a;用户带着认证信息请求后端接口&#xff0c;是否有权限访问&#xff0c;该接口和前端页面上的按钮一一对…

AI生成内容检测|Fast-DetectGPT:通过条件概率曲率对机器生成文本进行有效的零样本检测

【摘要】大型语言模型 (LLM) 已显示出生成流畅且有说服力的内容的能力&#xff0c;这既带来了生产力机会&#xff0c;也带来了社会风险。要构建值得信赖的 AI 系统&#xff0c;必须区分机器生成的内容和人类创作的内容。领先的零样本检测器 DetectGPT 展示了值得称赞的性能&…

Github 2024-05-25 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Svelte项目1TypeScript项目1Python项目1Go项目1Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust…

建筑工程乙级资质全面解析:设计能力与业务范畴

建筑工程乙级资质全面解析&#xff1a;设计能力与业务范畴 建筑工程乙级资质是中国建筑业中一项重要的资质认证&#xff0c;标志着设计单位具备一定规模和水平的专业技术力量&#xff0c;能够在限定范围内承担建筑设计及相关工程服务。本文将深入解析乙级资质的设计能力与业务…

如果有多个文件夹,怎么快速获得文件夹的名字呢

上一篇写到怎么批量建立文件夹&#xff0c;那么怎么获取批量文件夹的名字呢&#xff1f; 一、啊这&#xff0c;这真是一个好问题二、这个得用Python&#xff08;文本末尾有打包程序&#xff0c;点击链接运行就可以了&#xff09;&#xff08;1&#xff09;首先建立一个py文件&a…