Spring | Spring、Spring MVC 和 Spring Boot 的区别
关注:CodingTechWork
引言
在 Java 开发领域,Spring、Spring MVC 和 Spring Boot 是三个经常被提及的概念。它们之间既有联系又有区别,对于初学者来说可能会感到困惑。本文将详细介绍它们的区别,并通过示例代码帮助读者更好地理解。
Spring 框架
什么是 Spring 框架
Spring 框架是一个开源的 Java 平台,为开发 Java 应用程序提供了全面的基础设施支持。它包含了许多模块,如依赖注入(DI)、面向切面编程(AOP)、数据访问(JDBC、ORM)、事务管理、Web 开发等。
Spring 框架的特点
- 轻量级和松耦合:Spring 框架尽可能减少对其他框架和组件的依赖,同时通过依赖注入等机制降低组件之间的耦合度。
- 模块化设计:Spring 框架由多个模块组成,开发者可以根据需要选择性地使用。
示例代码
以下是一个简单的 Spring 应用程序示例,展示如何通过 XML 配置文件管理 Bean。
xml文件
<!-- Spring XML 配置文件 -->
<beans><bean id="userService" class="com.example.UserService"><property name="dataSource" ref="dataSource"/></bean><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb"/><property name="username" value="root"/><property name="password" value="password"/></bean>
</beans>
业务类
public class UserService {private DataSource dataSource;public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;}public void performService() {System.out.println("Service performed with data source: " + dataSource);}
}
主类
public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = (UserService) context.getBean("userService");userService.performService();}
}
Spring MVC
什么是 Spring MVC
Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它是一个表现层框架,用于处理 HTTP 请求和响应。
Spring MVC 的特点
- 灵活性高:Spring MVC 分离了控制器、模型对象、调度器以及处理程序对象等角色,使得开发更加灵活。
- 与视图技术无关:Spring MVC 不限制开发者使用的视图技术,可以与 JSP、Thymeleaf 等多种视图技术配合使用。
示例代码
以下是一个简单的 Spring MVC 示例,展示如何处理 HTTP 请求。
controller类
@Controller
public class HelloWorldController {@RequestMapping("/hello")public String showHello(Model model) {model.addAttribute("message", "Hello, Spring MVC!");return "hello";}
}
jsp
<!-- hello.jsp -->
<html>
<body><h2>${message}</h2>
</body>
</html>
mvc配置类
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");registry.viewResolver(resolver);}
}
主类
public class MainApp {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(WebConfig.class);// 启动 Spring MVC 容器}
}
Spring Boot
什么是 Spring Boot
Spring Boot 是基于 Spring 框架的扩展,旨在简化 Spring 应用的初始搭建和开发过程。它通过“约定优于配置”的理念,减少了大量的配置工作。
Spring Boot 的特点
- 快速开发:Spring Boot 提供了大量默认配置,减少了项目配置的工作量。
- 独立运行:Spring Boot 应用程序可以被打包成可执行的 JAR 文件,内置嵌入式服务器,无需外部部署环境。
- 生产就绪:Spring Boot 提供了多种生产就绪的功能,如健康检查、指标监控等。
示例代码
以下是一个简单的 Spring Boot 示例,展示如何快速搭建一个 Web 应用程序。
主类
@SpringBootApplication
public class SpringBootDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBootDemoApplication.class, args);}
}
controller
@RestController
public class HelloWorldController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}
配置文件
# application.properties
server.port=8080
Spring、Spring MVC 和 Spring Boot 的区别
Spring 框架
- 定位:通用的 Java 应用程序开发框架,提供依赖注入、事务管理等基础功能。
- 配置方式:主要通过 XML 文件或 Java 配置类。
- 适用场景:适用于各种类型的 Java 应用程序,包括非 Web 应用。
Spring MVC
- 定位:Spring 框架的一个模块,专门用于 Web 应用程序的开发。
- 配置方式:需要配置 DispatcherServlet 和视图解析器等。
- 适用场景:主要用于处理 HTTP 请求和响应,构建 Web 应用。
Spring Boot
- 定位:基于 Spring 框架的扩展,简化了 Spring 应用的开发。
- 配置方式:通过 application.properties 或 application.yml 文件进行配置,大量使用默认配置。
- 适用场景:适用于快速开发独立的、生产级别的 Spring 应用。
总结
Spring 框架是一个通用的 Java 开发框架,提供了依赖注入、事务管理等功能;Spring MVC 是 Spring 框架的一个模块,专注于 Web 应用程序的开发;Spring Boot 是 Spring 框架的扩展,通过“约定优于配置”的理念简化了 Spring 应用的开发过程。开发者可以根据实际需求选择合适的框架或组合来构建应用程序。
相关文章:
Spring | Spring、Spring MVC 和 Spring Boot 的区别
关注:CodingTechWork 引言 在 Java 开发领域,Spring、Spring MVC 和 Spring Boot 是三个经常被提及的概念。它们之间既有联系又有区别,对于初学者来说可能会感到困惑。本文将详细介绍它们的区别,并通过示例代码帮助读者更好地理解…...
观察者模式在Java微服务间的使用
一.、使用RabbitMQ来实现 (1) 生产者(订单微服务) import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…...
C语言--回文字符串
输入:字符串,判断是否是回文字符串,例如abcba输出Yes 输出:是否 代码 思路:使用两个指针分别指向头和尾,依次对比第一个元素和最后一个元素,第二个和倒数第二个元素,如果遇到不相同…...
【云计算物理网络】数据中心网络架构设计
云计算的物理基础:数据中心网络架构设计 一、技术背景:从“三层架构”到“云原生网络”二、技术特点:云数据中心网络的四大支柱三、技术细节:CLOS架构的实现挑战四、未来方向:从“连接设备”到“感知服务”结语&#x…...
Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力
在之前的实践中,我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了:只要完成向量化索引,就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了,但总觉得少了点什么—— 比如用户还得专门打开一…...
批处理脚本的主要解析规则
批处理脚本的主要解析规则 批处理脚本(Batch files)有一套独特的解析规则,这些规则在很多情况下不太直观,但了解它们对于编写可靠的脚本至关重要。以下是最重要的一些规则: 1. 变量扩展规则 标准变量扩展 (%变量%) 解析时扩展:…...
TRDI 公司的RiverPro 和 RioPro ADCP 用户指南
TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…...
Linux 基础入门操作 前言 linux操作指令介绍
1 linux 目录介绍 Linux 文件系统采用层次化的目录结构,所有目录都从根目录 / 开始 1.1 核心目录 / (根目录) 整个文件系统的起点、包含所有其他目录和文件 /bin (基本命令二进制文件) 存放系统最基本的shell命令:如 ls, cp, mv, rm, cat 等&#…...
【总结】SQL注入防护手段
1、对提交的数据进行数据类型判断,比如id值必须是数字:is_numeric($id) 2、对提交的数据进行正则匹配,禁止出现注入语句,比如union、or、and等 3、对提交数据进行特殊符号转义,比如单引号、双引…...
OpenCV 图形API(11)对图像进行掩码操作的函数mask()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 对矩阵应用掩码。 该函数mask设置来自给定矩阵的值,如果掩码矩阵中对应的像素值设为true,否则将矩阵的值设为0。 支持的源矩阵…...
使用C#写的一个Kafka的使用工具
由于offset不支持通过界面推送数据,所以我写了一个kafka的连接工具,能够直接从界面推送数据,方便使用。由于使用的是C#写的,所以比offset要流畅的多。 1、数据源连接 2、获取集群的topic 3、点击获取数据能够获取最新的100条数…...
【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!
在嵌入式Linux系统开发中,驱动程序开发是一项关键技术,它作为硬件与软件之间的桥梁,实现了操作系统对硬件设备的控制。相较于嵌入式Linux应用开发,驱动开发由于涉及底层硬件且抽象程度较高,往往让初学者感到难度较大。…...
MCP协议java开发的servers,已开源
访问地址: mcp-server-java 已实现的filesystem提高性能和效率,比Python的操作更顺畅。java实现,让部署更容易。...
飞浆PaddlePaddle 猫狗数据大战
猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作(python) 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…...
嵌入式硬件篇---JSON通信以及解析
文章目录 前言一、JSON特点语法简单数据格式灵活轻量化跨语言使用二、JSON数据结构对象数组三、JSON在单片机之间通信的应用数据封装与传输四、JSON示例代码五、JSON在上位机与单片机之间通信的应用数据交互六、JSON示例代码七、JSON解析与生成解析生成八、Python中的数据解析1…...
递归典例---汉诺塔
https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 …...
使用高德api实现天气查询
创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...
蓝桥云客-修建灌木
1.修剪灌木 - 蓝桥云课 修剪灌木 问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为0厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪…...
OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者: magnitude…...
Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central
具体错误 [ERROR] Failed to execute goal on project datalink-resource: Could not resolve dependencies for project com.leon.datalink:datalink-resource:jar:1.0.0: Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central (https://repo.maven…...
Express学习笔记(三)——使用 Express 写接口
目录 1. 创建基本的服务器 2. 创建 API 路由模块 3. 编写 GET 接口 4. 编写 POST 接口 5. CORS 跨域资源共享 5.1 接口的跨域问题 5.2 使用 cors 中间件解决跨域问题 5.3 什么是 CORS 5.4 CORS 的注意事项 5.5 CORS 响应头部 - Access-Control-Allow-Origin 5.6 COR…...
透视飞鹤2024财报:如何打赢奶粉罐里的科技战?
去年乳制品行业压力还是不小的,尼尔森IQ指出2024年国内乳品市场仍处在收缩区间。但是,总有龙头能抗住压力,飞鹤最近交出的2024财报中就有很多亮点。 比如,2024年飞鹤营收207.5亿元、同比增长6%,净利润36.5亿元&#x…...
【HarmonyOS Next之旅】DevEco Studio使用指南(十)
目录 1 -> Optimize Imports功能 2 -> 父/子类快速跳转 3 -> 查看接口/类的层次结构 4 -> 代码自动补全 1 -> Optimize Imports功能 使用编辑器提供的Optimize Imports,可以快速清除未使用的import,并根据设置的规则对import进行合并…...
数据框的添加
在地图制图中,地图全图显示的同时希望也能够显示局部放大图,以方便查看地物空间位置的同时,也能查看地物具体的相对位置。例如,在一个名为airport的数据集全图制图过程中,希望能附上机场区域范围的局部地图,…...
java并发编程-并发容器
并发容器 CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMapConcurrentSkipListMap迭代器的fail-fast与fail-safe机制应用场景 CopyOnWriteArrayList 线程不安全容器:ArrayList代替Vector、synchronizedList适用于读多写少的场景,对读操作不加…...
【3.软件工程】3.2 瀑布模型
瀑布模型全解析:从理论到实践的经典软件开发框架 🌊 一、瀑布模型核心流程图 #mermaid-svg-87uBSLYlWEdrgikJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-87uBSLYlWEdrgikJ .error-icon{…...
使用 PyTorch 的 `torch.rot90` 进行张量旋转:数据增强的利器
使用 PyTorch 的 torch.rot90 进行张量旋转:数据增强的利器 在深度学习和计算机视觉领域,数据增强是一项至关重要的技术。通过对训练数据进行各种变换,如旋转、翻转、裁剪等,我们可以增加数据的多样性,从而提高模型的泛化能力。PyTorch 提供的 torch.rot90 函数是一个简单…...
数据一体化/数据集成对于企业数据架构的重要性
在数字化时代,企业的核心竞争力已经从传统的资源和规模优势转向数据驱动的智能化能力。数据一体化作为信息化发展的核心趋势,不仅是技术升级的必然选择,更是企业实现数字化转型的关键路径。 一、数据一体化/数据集成:数字化转型的…...
PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具
PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具 📝🎤 在现代化的演讲和演示中,如何高效地控制PPT进程、保证展示的流畅性与精准性,成为了每个演讲者必须面对的挑战。无论是商务汇报、学术演讲࿰…...
Oracle中的UNION原理
Oracle中的UNION操作用于合并多个SELECT语句的结果集,并自动去除重复行。其核心原理可分为以下几个步骤: 1. 执行各个子查询 每个SELECT语句独立执行,生成各自的结果集。 如果子查询包含过滤条件(如WHERE)、排序&…...
