@EnableWebFlux注释的用途是什么?

时间:2019-11-24 13:50:40

标签: spring-boot spring-webflux

我只是不明白@EnableWebFlux的真正需求是什么。因为,我能够编写一个简单的“ helloworld” WebFlux REST API,并且能够在不使用该批注的情况下向控制器发送请求。

我已经看过文档,但对我来说还不清楚。

2 个答案:

答案 0 :(得分:0)

如果您使用spring-boot-starter-webflux,配置将通过ReactiveWebServerFactoryAutoConfigurationWebFluxAutoConfiguration自动完成,因此您不需要@EnableWebFlux

在不使用spring-webflux的情况下使用spring-boot时,需要在@EnableWebFlux类上添加@Configuration以从WebFluxConfigurationSupport导入Spring WebFlux配置

答案 1 :(得分:0)

Spring Boot使用自动配置机制,该机制基于项目的依赖关系(类路径)为您创建默认配置。因此,当类路径中包含spring-boot-starter-webflux时,spring boot自动配置机制会自动创建该模块正常工作所需的所有bean。这就是为什么您的@Controller开箱即用的原因。

您的项目依赖于名为spring-boot-autoconfigure的模块,并且有一个类org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,该类@Configuration负责自动配置webflux模块。但是当满足其他条件(由@Configuration注释表示)时,此@ConditionalOn...才有效。

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
@ConditionalOnClass(WebFluxConfigurer.class)
@ConditionalOnMissingBean({ WebFluxConfigurationSupport.class })
@AutoConfigureAfter({ ReactiveWebServerFactoryAutoConfiguration.class, CodecsAutoConfiguration.class,
        ValidationAutoConfiguration.class })
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
public class WebFluxAutoConfiguration { ...

@EnableWebFlux仅导入DelegatingWebFluxConfiguration

@Import(DelegatingWebFluxConfiguration.class)
public @interface EnableWebFlux {
}
  

和此类WebFluxConfigurationSupport的子类,可检测   并委派给所有类型为WebFluxConfigurer的bean,从而允许他们   定制WebFluxConfigurationSupport提供的配置。   这是@EnableWebFlux实际导入的类。