1.简价
webflux
依赖及启动
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
启动
@SpringBootApplication
@RestController
public class FluxWebApplication {
public static void main(String[] args) {
SpringApplication.run(FluxWebApplication.class, args);
}
@GetMapping("hello")
public String hello(){
return"hello";
}
@GetMapping("hello2")
public Mono<String> hello2(){
return Mono.just("hello2");
}
@GetMapping("hello3")
public Flux<String> hello3(){
String[] str = {"123","abc"};
return Flux.fromArray(str).filter(s -> "123".equals(s));
}
}
基于spring-boot的初始化
WebFluxAutoConfiguration
@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
@ConditionalOnClass(WebFluxConfigurer.class)
//定义初始化requestmapper请求处理(fluxweb主配置)
@ConditionalOnMissingBean({ WebFluxConfigurationSupport.class })
//服务容器配置/序列化/反序列化/参数校验
@AutoConfigureAfter({ ReactiveWebServerFactoryAutoConfiguration.class,
CodecsAutoConfiguration.class, ValidationAutoConfiguration.class })
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
public class WebFluxAutoConfiguration {
//略去一些代码
//下面fluxweb基础配置初始,包含 beanfactory,view转换器,请求参数处器等
//这块其实跟springmvc类似
@Configuration
@EnableConfigurationProperties({ ResourceProperties.class, WebFluxProperties.class })
@Import({ EnableWebFluxConfiguration.class })
public static class WebFluxConfig implements WebFluxConfigurer {
private final ResourceProperties resourceProperties;
private final WebFluxProperties webFluxProperties;
private final ListableBeanFactory beanFactory;
//方法参数处理器
private final List<HandlerMethodArgumentResolver> argumentResolvers;
//处定义http编解码器
private final List<CodecCustomizer> codecCustomizers;
private final ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;
//视图转换器
private final List<ViewResolver> viewResolvers;
//略去一些代码
}
//略去一些代码
}
fluxweb主配置
WebFluxConfigurationSupport
/**
* The main class for Spring WebFlux configuration.
* <p>Import directly or extend and override protected methods to customize.
*/
public class WebFluxConfigurationSupport implements ApplicationContextAware {
//跨域配置列表
@Nullable
private Map<String, CorsConfiguration> corsConfigurations;
//请求路径匹配配置器
@Nullable
private PathMatchConfigurer pathMatchConfigurer;
//视图转器注册器
@Nullable
private ViewResolverRegist