作為Java世界首個(gè)響應(yīng)式Web框架仁热,Spring 5最大的亮點(diǎn)莫過(guò)于提供了完整的端到端響應(yīng)式編程的支持。
左側(cè)是傳統(tǒng)的基于Servlet的Spring Web MVC框架渠缕,右側(cè)是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架鸽素,從上到下依次是Router Functions,WebFlux亦鳞,Reactive Streams三個(gè)新組件馍忽。
- Router Functions: 對(duì)標(biāo)@Controller,@RequestMapping等標(biāo)準(zhǔn)的Spring MVC注解燕差,提供一套函數(shù)式風(fēng)格的API遭笋,用于創(chuàng)建Router,Handler和Filter徒探。
- WebFlux: 核心組件瓦呼,協(xié)調(diào)上下游各個(gè)組件提供響應(yīng)式編程支持。
- Reactive Streams: 一種支持背壓(Backpressure)的異步數(shù)據(jù)流處理標(biāo)準(zhǔn)测暗,主流實(shí)現(xiàn)有RxJava和Reactor央串,Spring WebFlux默認(rèn)集成的是Reactor。
在Web容器的選擇上碗啄,Spring WebFlux既支持像Tomcat质和,Jetty這樣的的傳統(tǒng)容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty稚字,Undertow那樣的異步容器饲宿。不管是何種容器,Spring WebFlux都會(huì)將其輸入輸出流適配成Flux<DataBuffer>格式尉共,以便進(jìn)行統(tǒng)一處理褒傅。
值得一提的是,除了新的Router Functions接口袄友,Spring WebFlux同時(shí)支持使用老的Spring MVC注解聲明Reactive Controller。和傳統(tǒng)的MVC Controller不同霹菊,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse剧蚣,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse支竹。