我只是不明白@EnableWebFlux的真正需求是什么。因为,我能够编写一个简单的“ helloworld” WebFlux REST API,并且能够在不使用该批注的情况下向控制器发送请求。
我已经看过文档,但对我来说还不清楚。
答案 0 :(得分:0)
如果您使用spring-boot-starter-webflux
,配置将通过ReactiveWebServerFactoryAutoConfiguration
和WebFluxAutoConfiguration
自动完成,因此您不需要@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实际导入的类。