Spring面试题, Spring WebFlux 是什么?它与 Spring MVC 有何不同?
Spring面试题, Spring WebFlux 是什么?它与 Spring MVC 有何不同?
QA
Step 1
Q:: Spring WebFlux 是什么?它与 Spring MVC 有何不同?
A:: Spring WebFlux 是 Spring 5 引入的一种响应式编程框架,用于构建非阻塞和事件驱动的 Web 应用程序。它主要基于 Reactor 项目,使用异步的 I/
O 处理请求。与传统的 Spring MVC 不同,Spring WebFlux 是完全非阻塞的,并且支持背压(Backpressure)。Spring MVC 使用的是基于线程池的阻塞式模型,而 WebFlux 则是基于 Reactor 的响应式流模型,能更好地处理大量并发请求。
Step 2
Q:: Spring WebFlux 的核心组件有哪些?
A:: Spring WebFlux 的核心组件包括:WebHandler、RouterFunction、HandlerFunction、WebClient 等。WebHandler 是一个通用的非阻塞请求处理接口,RouterFunction 定义了路由规则,HandlerFunction 是路由到的处理器,WebClient 则是用于发起异步 HTTP 请求的客户端。
Step 3
Q:: 什么是响应式编程?
A:: 响应式编程是一种基于异步数据流和变化传播的编程范式。它允许开发者以声明的方式构建数据流,并在数据变化时自动触发相应的处理。响应式编程使得处理异步事件(如用户输入、网络请求等)更加简单和直观。
Step 4
Q:: 如何在 Spring WebFlux 中实现路由?
A:: 在 Spring WebFlux 中,可以使用 RouterFunction 来实现路由。RouterFunction 是一个函数式接口,用于定义请求路径与处理器之间的映射。通过 RouterFunction 类的 route()
方法,可以将请求路径映射到特定的 HandlerFunction。示例代码如下:
RouterFunction<ServerResponse> route = RouterFunctions.route()
.GET("/hello", request -> ServerResponse.ok().body(BodyInserters.fromValue("Hello, World!")))
.build();
Step 5
Q:: Spring WebFlux 中如何处理错误?
A:: 在 Spring WebFlux 中,可以通过在 WebFilter 中捕获异常并返回自定义的错误响应来处理错误。还可以使用 @
ExceptionHandler 注解定义全局或特定控制器的异常处理方法。示例代码如下:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleRuntimeException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
}
}