这几天在学习Spring相关的知识,因为市场都在用它,所以不得不学它。当学习到Spring WebFlux这一章节的时候,我总是云里雾里,无法根据书本中的知识在我脑子里形成对于Spring WebFlux的基本面貌。
是的,我学了两天,却还没有弄明白,Spring WebFlux到底是什么。
可是,我们往往平庸是因为我们对于一个问题太想要结果,而伟大的作品总是在悄无声息中慢慢形成。在我的耐心学习下,终于算是看到了它的轮廓。
首先要知道什么是Spring WebFlux,我们可以从Spring MVC来谈起。MVC是一种实时返回结果的系统,当我们用Spring MVC来安装项目的时候,意味着,所有的请求,不管是post()、get()、delete()还是put()也好,在查询数据或者是操作数据之后,从控制器到数据库Repository都是整个实时返回的,我们称之为阻塞的以及反应式的,即,在前面的代码没有完全执行完成以前,后面的代码需要一直等到,直到前面的代码拿到结果,后面的代码才会执行。
进入到Spring WebFlux之后,一切变了。我在刚学习Spring WebFlux时,一直觉得它很像java8中对于流的操作,像在什么地方呢?就是它也是惰性执行的,即在终端操作出发之前,流的中间不会被触发,意味着,如果没有终端操作,中间操作的代码不会被执行。这和普通的代码是不是不同? 普通的代码执行过程时是从前往后执行,后面的代码执行时,前面的代码一定是执行完了的。那么,Spring WebFlux是不是也是这样呢?是的,我们在拿到Flux或者Mono(为了节省时间,后面只说Flux,因为它们两个很像)时,需要进行一个subscribe操作,即,意味着,只有调用Flux的subscribe方法时,你所定义的Flux或者是返回的Flux的方法才会执行。所以,这一点就像java8对于流的操作一致。另外,我们还会有一个疑问,如果我们在操作Flux时,如果代码执行有误,比如,在正常MVC中,我们可以加异常捕获处理,进行错误的提示,那,进入到Spring WebFlux之后,会不会就不支持这个功能呢? 我想说的是,多虑的,在subscribe操作时,可以接受多个consummer(这下知道为什么说Spring WebFlux支持函数式编程风格了吧),其中第二个consumer就是针对错误的提示,以便在触发流的操作时,如果上游有报错的情况下,可以手动捕获并处理。同时,最重要的一点时,这个调用subscribe的地方可以是在你想要的地方进行使用,意味着,只有在消费者准备好消费流的时候,流的处理才会进行触发,而且,触发的过程完全是异步执行,主线程不会等待你处理完成之后才执行后面的代码。最后,相比较于java8中对于Stream的操作不同的是,Spring WebFlux支持背压机制,即,消费端可以决定要多少元素。不会消费全部元素。
所以,这就是能理解为什么说Spring WebFlux是函数式的、惰性的、反应式的了吧。
希望大家能够多多留言,我们一起进步、学习!
标签:Spring,代码,WebFlux,Flux,初识,操作,执行 From: https://blog.csdn.net/m0_72897587/article/details/144649820