50、Spring WebFlux 的 自动配置 的一些介绍,与 Spring MVC 的一些对比

这篇具有很好参考价值的文章主要介绍了50、Spring WebFlux 的 自动配置 的一些介绍,与 Spring MVC 的一些对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring WebFlux

Spring WebFlux 简称 WebFlux ,是 spring5.0 新引入的一个框架。
SpringBoot 同样为 WebFlux 提供了自动配置。
Spring WebFlux 和 Spring MVC 是属于竞争关系,都是框架。在一个项目中两个也可以同时存在。

SpringMVC 是基于 Servlet API 的, 是属于同步的框架,就是有请求过来,SpringMVC 去获取请求数据的时候,如果这条数据没有读取到,那么这条读取数据的线程就一直被阻塞的,意味着得专门有一条线程来处理每个请求,就是客户端每发来一个请求,服务器这边就得分配一条线程去处理请求。因此在高并发的时候,SpringMVC是会存在一些限制的。

WebFlux 是基于反应式的 API ,脱离了 Servlet API ,反应式的 API 是一个异步的,不需要为每个请求生成单独的线程去处理。

Spring WebFlux 是集成了 Reactor框架 / 基于Reactor框架
Spring WebFlux和Reactor底层默认使用 Netty 作为Web服务器

★ Reactor框架(反应式框架)

Reactor框架采用Mono和Flux两个类代表消息发布者,因此它们都实现了CorePublisher<T>接口,它们的区别在于:

- Mono代表0~1个非阻塞数据;而Flux则代表0~N数据个非阻塞序列。
- Mono相当于只是一个Optional值;而Flux才是Stream。


基本原理,其实就是基于 消息发布 - 消息订阅 的异步通信方式。

★ Spring WebFlux

Spring WebFlux就是基于Reactor实现的,其中Flux名称就是来自Reactor中的Flux类,WebFlux包括了
对反应式HTTP、服务器推送事件(SSE:Server Send Event)及WebSocket的支持。

Spring WebFlux提供了两种开发方式:
- 使用类似Spring MVC的注解方式。在这种方式下,依然使用@Controller、@RequestMapping等注解修饰类、方法即可。
- 使用函数式编程模型的方式。在这种方式下,程序使用RouterFunction来注册映射地址和处理器方法之间路由关系。


上面这两种编程模型只是形式上有所不同(代码编写方式上存在不同),它们本质上完全是一样的,

它们都运行在相同的反应式流的基础之上。

★ Spring MVC VS Spring WebFlux

================================Spring MVC ================================

--- Spring MVC 基于传统Servlet,服务器需要使用很大的线程池才能支持大量的并发请求;

HttpServletRequest来获取请求参数:getParameter(),它是一个典型的同步方法,该方法的返回值是String类型。
——这意味着在没有获取请求参数之前,该方法就会阻塞线程,这就是同步。

HttpServletResponse来生成响应,它也是同步:服务器生成的响应完全发送给客户端之前,该线程什么也做不了。

这种同步的设计意味着,每当一个客户端请求到来时,必须启动单独的线程来为该请求提供服务。

当请求的并发数量非常大时,只能通过水平的集群扩展、增加更多集群节点来处理这些并发请求。


================================Spring WebFlux=============================


--- Spring WebFlux采用异步、非阻塞的编程模型,底层反应式容器无需启动额外的线程。

ServerRequest来获取请求参数,
比如       bodyToFlux(Class<? extends T> elementClass)、
           bodyToMono(Class<? extends T> elementClass)、
           formData()
这些的返回值都是 Flux 或 Mono 
		
     而 Flux 和 Mono 都并不是最终的数据 ,因此无需同步、阻塞等待数据的到来,Mono和Flux都是CorePublisher
     因此它们可以说只是消息发布者(或者说是一个消息通道,可以不管获取的消息是否有数据),而尝试获取消息的程序就是消息订阅者。
     这意味着程序在获取Flux或Mono之后,完全可以继续向下执行,无需阻塞线程。

Spring WebFlux的最大优势在于:能以较小的、固定数量的线程和更少的内存处理更多的并发请求,

因此Spring WebFlux可以在高负载的情况具有更好的可伸缩性——因为无需显著增加线程和内存。

Spring MVC适用于同步处理的场景,Spring WebFlux适用于异步处理的场景,

尤其在大量IO密集型(比如Spring Cloud网关)的服务中使用Spring WebFlux比较适合。 

★ Spring WebFlux的自动配置

Spring WebFlux的自动配置主要由WebFluxAutoConfiguration自动配置类负责提供支持。

自动配置在Spring WebFlux默认功能的基础上添加了如下特性:

- 为HttpMessageReader和HttpMessageWriter实例配置了codecs。
- 对服务器静态资源提供支持,包括对WebJars的支持。

★ 对WebFlux自动配置进行定制

若要在保留自动配置的基础上增加一些自定义的Spring WebFlux配置(例如添加拦截器、格式化器、视图控制器等),

则可通过实现自己的WebFluxConfigurer类,并使用@Configuration注解修饰该类、但不要使用@EnableWebFlux注解修饰。

实现该类的如下方法:

- addFormatters(FormatterRegistry registry):添加格式化器
- configureArgumentResolvers(ArgumentResolverConfigurer configurer):配置参数解析器
- configurePathMatching(PathMatchConfigurer configurer):配置路径匹配器
- configureViewResolvers(ViewResolverRegistry registry):配置视图解析器
...

★ 全面接管

如果使用@Configuration和@EnableWebFlux注解同时修饰自己的Spring WebFlux配置类。

这意味着完全关闭了Spring WebFlux的自动配置,开发者必须手动完成所有关于Spring WebFlux的配置工作。

★ 静态资源处理

(完全类似于Spring Boot对Spring MVC所提供的静态资源处理)

与Spring MVC类似,Spring Boot同样使用类加载路径下/static目录(或/public或/resources或/META-INF/resources)
或应用根路径作为WebFlux的静态资源路径。 

如需添加静态资源路径,可提供WebFluxConfigurer实现类,通过实现addResourceHandlers()方法可添加自定义的静态资源目录

如果要更改,覆盖原来的静态资源目录,可通过spring.web.resources.static-locations来覆盖系统原有的静态资源目录。

同样支持版本无关的静态资源和静态资源缓存清除

★ 图标和首页

(完全类似于Spring Boot对Spring MVC的首页和图标支持)文章来源地址https://www.toymoban.com/news/detail-696546.html

与Spring MVC类似,Spring WebFlux同样可使用静态资源路径下的index.html或templates路径下index模板作为应用的首页。

Spring WebFlux同样会使用静态资源路径下的favicon.ico文件作为应用的图标。

到了这里,关于50、Spring WebFlux 的 自动配置 的一些介绍,与 Spring MVC 的一些对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC中的一些常用注解

    目录 @RequestMapping 实现路由映射 限制请求方式 @PathVariable 从url中获取变量的值 更改绑定参数的名字 @RequestParam 可以传递集合  更改绑定参数的名字 可修改是否为必传参数 @RequestBody 获取请求正文的内容  可修改是否为必传参数 @RequestPart 可以支持上传文件 更改绑定参数的名字

    2024年01月19日
    浏览(44)
  • 43、基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面

    Spring MVC 的错误处理:基于 SpringBoot 自动配置之后的 Spring MVC 错误处理。 就是访问方法时出错,然后弄个自定义的错误页面进行显示。 方式一: 基于Spring Boot自动配置的错误处理方式,只要通过属性文件即可配置错误处理行为。 提供自定义的错误页面即可。 方式二: 使用

    2024年02月10日
    浏览(47)
  • JavaWeb开发框架对比与选择:Struts、Spring MVC、JavaEE

    引言:         在JavaWeb开发领域,选择合适的开发框架对于项目的成功与否至关重要。随着技术的不断发展,出现了许多优秀的开发框架,其中最为知名的包括Struts、Spring MVC和JavaEE。本文将对这三个框架进行对比,并给出选择的建议。 一、Struts框架         Struts是一

    2024年02月04日
    浏览(42)
  • Spring Boot 自动配置功能介绍

    Spring Boot 是一个流行的 Java 开发框架,它提供了许多便利的功能和工具,帮助开发者快速构建应用程序。其中一个最引人注目的特性是其强大的自动配置功能。 在传统的 Java 开发中,我们通常需要手动配置应用程序的各个组件和依赖项。这可能涉及到编写大量的配置代码,导

    2024年02月03日
    浏览(63)
  • Spring MVC学习随笔-Spring MVC介绍

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 概念: SpringMVC是基于Spring Framework衍生而来的MVC框架,主要解决了原有MVC框架开发过程中,控制器(Controller)的问题 SpringMVC是一个MVC框架 MVC是一个架构思想,在JavaEE开发中多用于Web开发

    2024年02月05日
    浏览(46)
  • 【Spring MVC】Spring MVC的功能使用和相关注解介绍

    Spring MVC主要有三个功能: 连接 获取参数 输出数据 对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了Spring MVC。 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。 先创建一个SpringMVC项目,过程和SpringBoot项目创建相

    2024年02月16日
    浏览(44)
  • Spring Boot中RabbitMQ自动配置的介绍、原理和使用

    RabbitMQ是一种高性能的消息队列系统,它支持多种消息协议和丰富的功能,如消息路由、消息确认、消息重试、死信队列等。在Spring Boot中,我们可以通过自动配置的方式来使用RabbitMQ。本文将介绍Spring Boot中RabbitMQ自动配置的介绍、原理和使用方法。 在Spring Boot中,我们可以通

    2024年02月11日
    浏览(59)
  • Spring mvc 组件介绍

    统一收口,接收请求,响应结果,相当于转发器,中央处理器。 有了 DispatcherServlet 减少了其它组件之间的耦合度。 根据请求的url查找Handler,既负责完成客户请求到 Controller 映射。 SpringMVC提供了不同的映射器实现不同的映射方式, 例如:配置文件方式、实现接口方式、注解

    2024年02月13日
    浏览(39)
  • Spring MVC介绍

    MVC 模式,全称为 Model-View-Controller(模型-视图-控制器)模式,它是一种软件架构模式,其目标是将软件的用户界面(即前台页面)和业务逻辑分离,使代码具有更高的可扩展性、可复用性、可维护性以及灵活性。 通常情况下,一个完整的 Java Web 应用程序,其结构如下图Jav

    2024年02月10日
    浏览(32)
  • JavaWeb框架:Spring MVC介绍

    MVC(Model View Controller,模型-视图-控制器) ,作为一种设计模式,用于应用程序的分层开发。 Spring MVC ,由 Spring 框架提供的基于 MVC 设计模式的一个轻量级 Web 开发框架。Spring MVC 提供了一个前端控制器 DispatcherServlet 来分派请求,然后通过配置处理程序映射、视图解析等,使

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包