作為Java世界首個響應(yīng)式Web框架,Spring 5最大的亮點莫過于提供了完整的端到端響應(yīng)式編程的支持。

image.png
左側(cè)是傳統(tǒng)的基于Servlet的Spring Web MVC框架,右側(cè)是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架,從上到下依次是Router Functions,WebFlux,Reactive Streams三個新組件。
- Router Functions: 對標@Controller,@RequestMapping等標準的Spring MVC注解,提供一套函數(shù)式風格的API,用于創(chuàng)建Router,Handler和Filter。
- WebFlux: 核心組件,協(xié)調(diào)上下游各個組件提供響應(yīng)式編程支持。
- Reactive Streams: 一種支持背壓(Backpressure)的異步數(shù)據(jù)流處理標準,主流實現(xiàn)有RxJava和Reactor,Spring WebFlux默認集成的是Reactor。
在Web容器的選擇上,Spring WebFlux既支持像Tomcat,Jetty這樣的的傳統(tǒng)容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那樣的異步容器。不管是何種容器,Spring WebFlux都會將其輸入輸出流適配成Flux<DataBuffer>格式,以便進行統(tǒng)一處理。
值得一提的是,除了新的Router Functions接口,Spring WebFlux同時支持使用老的Spring MVC注解聲明Reactive Controller。和傳統(tǒng)的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse。