【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux

server/2024/12/25 23:01:25/

无论是构建企业级应用,还是开发微服务,Spring都提供了丰富的模块来满足不同的需求。其中,Spring MVC和Spring WebFlux是两个重要的模块,它们分别用于处理传统的阻塞式Web应用和响应式Web应用。

其生态圈包括:

  • Spring Core:核心容器,提供依赖注入和控制反转功能。

  • Spring MVC:用于构建Web应用的模型-视图-控制器框架。

  • Spring WebFlux:用于构建响应式Web应用的框架。

  • Spring Data:简化数据访问的模块。

  • Spring Security:提供安全性功能的模块。

一、Spring MVC

1.1 概述

Spring MVC是Spring框架的一部分,主要用于构建基于请求-响应模式的Web应用。它采用了模型-视图-控制器(MVC)设计模式,将应用的业务逻辑、用户界面和输入控制分离,从而提高了代码的可维护性和可测试性。

1.2 核心概念
  • Controller:处理用户请求并返回响应。

  • Model:应用的数据和业务逻辑。

  • View:用户界面,通常是HTML页面。

1.3 示例:构建一个简单的Spring MVC应用

以下是一个简单的Spring MVC应用示例,演示如何处理用户请求并返回视图。

1.3.1 项目结构
spring-mvc-example
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           ├── controller
│   │   │           │   └── HelloController.java
│   │   │           └── SpringMvcApplication.java
│   │   └── resources
│   │       └── templates
│   │           └── hello.html
└── pom.xml
1.3.2 Maven依赖(pom.xml)
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
</dependencies>
1.3.3 主应用类(SpringMvcApplication.java
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringMvcApplication {public static void main(String[] args) {SpringApplication.run(SpringMvcApplication.class, args);}
}
1.3.4 控制器(HelloController.java
package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Hello, Spring MVC!");return "hello"; // 返回视图名称}
}
1.3.5 视图(hello.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Hello Page</title>
</head>
<body><h1 th:text="${message}">Hello, World!</h1>
</body>
</html>
1.4 运行应用

运行SpringMvcApplication类,访问http://localhost:8080/hello,你将看到“Hello, Spring MVC!”的消息。

二、Spring WebFlux

2.1 概述

Spring WebFlux是Spring 5引入的模块,用于构建响应式Web应用。它支持非阻塞式的编程模型,适合处理高并发的场景,能够更好地利用系统资源。

2.2 核心概念
  • 响应式编程:通过异步数据流和事件驱动的方式处理数据。

  • Mono和Flux:WebFlux中的核心数据类型,分别表示单个值和多个值的异步流。

2.3 示例:构建一个简单的Spring WebFlux应用

以下是一个简单的Spring WebFlux应用示例,演示如何处理异步请求。

2.3.1 项目结构
spring-webflux-example
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── controller
│   │   │               └── HelloController.java
│   │   └── resources
│   │       └── application.properties
└── pom.xml
2.3.2 Maven依赖(pom.xml)
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>
</dependencies>
2.3.3 控制器(HelloController.java
package com.example.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;@RestController
public class HelloController {@GetMapping("/hello")public Mono<String> hello() {return Mono.just("Hello, Spring WebFlux!"); // 返回一个Mono对象}
}
2.4 运行应用

运行HelloController类,访问http://localhost:8080/hello,你将看到“Hello, Spring WebFlux!”的消息。

三、总结

通过上述示例,我们深入了解了Spring MVC和Spring WebFlux的基本概念和用法。Spring MVC适合构建传统的阻塞式Web应用,而Spring WebFlux则为高并发场景提供了非阻塞的解决方案。根据项目需求的不同,开发者可以选择适合的模块来构建应用。 选择Spring MVC还是Spring WebFlux取决于应用的需求和架构设计,如果你的应用需要处理大量的并发请求,并且希望提高系统的响应速度和资源利用率,Spring WebFlux是一个理想的选择。而对于传统的Web应用,Spring MVC仍然是一个稳健且成熟的解决方案。


http://www.ppmy.cn/server/153162.html

相关文章

一网多平面

“一网多平面”是一种网络架构概念&#xff0c;具体指的是在一张物理网络之上&#xff0c;逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释&#xff1a; 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上&#xff0c;通过逻辑划分形成多个独立的网络平面…

【国产NI替代】基于FPGA的4通道电压 250M采样终端边缘计算采集板卡,主控支持龙芯/飞腾

4通道电压 250M采样终端边缘计算采集板卡 采用Arria10 SOC型号的FPGA&#xff0c;最高采样率能到 250M&#xff0c;主要为高速计算提供硬件平台。

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍&#xff1a;Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。Redis 如果在没有开启认证的情况下&#xff0c;…

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器&#xff0c;其协议基于485硬件接口的标准NRZ协议&#xff0c;通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明&#xff1a; 硬件接口 多摩川编码器使用RS485接口进行通信&#xff0c;接口定义如下&#xff1a; 5V供电&…

Escalate_Linux靶机

Escalate_Linux靶机 前言&#xff1a;集合了多种liunx提权方法的靶场&#xff0c;通过该靶场可以简单的了解liunx提权方法 1&#xff0c;扫描一下端口 80/tcp open http 111/tcp open rpc 2049/udp nfs要知道对方的共享才能挂载 139/445 Samba SMB是一个协议名&#xff0c…

java Redis 操作工具类封装(备忘)

在 Java 中&#xff0c;封装 Redis 的常见操作是提升开发效率和代码可维护性的好方法。使用 Redis 可以帮助你的应用在缓存、消息队列、会话存储等方面显著提高性能。以下是一个基于 Jedis 客户端的 Redis 操作工具类封装示例。 1. 添加 Redis 依赖 首先&#xff0c;确保在 M…

thinkphp6使用MongoDB多个数据,聚合查询的坑

我使用的是thinkphp6,mongodb4.0实际业务查询 $list Db::connect(tstd_mongo)->table("$table_time.Item")->where($where)->order("Cause","asc")->field(_id,DBID,Data,GSID,MainKind,ManID,DISTINCT(Serial) Serial,SubKind,Tim…

115.【C语言】数据结构之排序(希尔排序)

目录 1.希尔排序(又称缩小增量排序)(插入排序的优化版本) 过程1:预排序 过程2:插入排序 2.代码 预排序代码 1.一次排一组(时间复杂度比第二种写法高) 运行结果 其他写法 2.一次排多组(多组并排) 运行结果 希尔排序代码 1.当预排序一次排一组时 运行结果 2.当预排…