路由器和带注释的控制器有啥区别?
Posted
技术标签:
【中文标题】路由器和带注释的控制器有啥区别?【英文标题】:What is the difference between Router and Annotated Controllers?路由器和带注释的控制器有什么区别? 【发布时间】:2019-01-18 01:09:53 【问题描述】:我正在使用 WebFlux 进行 Web 开发。 我找到了两种表达请求映射的方法。
-
带注释的控制器:如
@Controller
或 @RestController
。
RouterFunction
:RouterFunction
用于将请求路由到 HandlerFunction
。
我发现第二个比第一个更难使用,而且我不知道它们之间的区别。
所以我想问一下 2 和 1 哪个表现更好?
谢谢我的朋友们!
【问题讨论】:
'@RestControlle' = '@Controller' + '@ResponseBody' 默认在方法上 是的,对。我只是举个例子。 【参考方案1】:让我从你的最后一个问题开始
在性能上 2 是否比 1 好?
不,性能上没有区别。
我发现2比1更难用
这完全取决于个人喜好。可能是你习惯了命令式的编程风格。因此你觉得写起来很容易(相信我,过一段时间你也会对路由器函数有同样的感觉)
基本上,路由器函数是朝着函数式编程迈出的一步。 Spring 希望用户能够灵活地以函数式样式配置路由。 除此之外,控制器和路由器功能没有区别。
【讨论】:
好吧。非常感谢!我理解了一部分。 @MrXionGe 你不明白哪一部分 首先,感谢您的关注。关于 Mono 和 Flux。使用 Mono 或 Flux 与不使用有什么区别?我认为它们在性能上没有太大差异。因为我通过 JMeter 进行了测试 您的原始问题与“使用 Mono 或 Flux 有什么区别”无关【参考方案2】:RouterFunction 的用途与注解相似。但是,有一个重要的区别:使用注解,您的路由仅限于可以通过注解值表达的内容。
【讨论】:
请你举一两个例子,说明功能配置比注释更进一步? jivimberg.io/blog/2018/05/20/spring-functional-router - 请看这篇文章【参考方案3】:如果我们保留个人偏好,则过滤器有一个明显的区别。
WebFlux 框架提供两种类型的过滤器:WebFilters 和 HandlerFilterFunctions。
它们之间的主要区别在于 WebFilter 实现适用于所有端点,而 HandlerFilterFunction 实现仅适用于基于路由器的端点。
【讨论】:
非常感谢。WebFlux 中没有拦截器。当然,WebFilter 是...以上是关于路由器和带注释的控制器有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
react路由器中的hashHistory和browserHistory有啥区别?