如何在Spring WebFlux集成的XML配置中使用自定义WebClient
如何在Spring Integration XML配置中注入自定义WebClient到WebFlux outbound网关
我通过添加自定义过滤器构建了WebClient,希望将其用于Spring Integration的WebFlux集成。已知WebFluxRequestExecutingMessageHandler支持接收自定义WebClient,但无法通过XML配置注入我当前定义的WebClient Bean。
当前配置和代码如下:
Spring网关XML配置
<outbound-gateway id="reactiveFullConfig" url="http://localhost:8080/hello" http-method="GET" request-channel="requests" reply-timeout="1234" extract-request-payload="false" expected-response-type="java.lang.String" mapped-request-headers="requestHeader1, requestHeader2" mapped-response-headers="responseHeader" reply-channel="replies" charset="UTF-8" order="77" auto-startup="false" transfer-cookies="true" reply-payload-to-flux="true" body-extractor="bodyExtractor" publisher-element-type-expression="headers.elementType" extract-response-body="false" web-client="customWebClient"> <uri-variable name="foo" expression="headers.bar"/> </outbound-gateway> <beans:bean id="customWebClient" class="com.abc.mypackage.CreateWebClient" init-method="createWebClient"/>
CreateWebClient.java代码
public class CreateWebClient { @Autowired MyCustomBuilderFactory builderFactory; public WebClient createWebClient() { WebClient webClient = builderFactory.getbuilder("someconfiguration").build(); return webClient; } }
注:我不想让CreateWebClient实现WebClient接口,只想将其构建好的WebClient实例交给Spring Integration使用。
问题分析
你当前的customWebClient Bean注册的是CreateWebClient类型的实例,而非WebClient类型。init-method仅会在Bean初始化阶段执行指定方法,但不会改变Bean本身的类型。而WebFluxRequestExecutingMessageHandler的web-client属性要求注入的是WebClient类型的Bean,因此类型不匹配导致注入失败。
解决方案
- 先注册
CreateWebClient的实例作为辅助Bean:<beans:bean id="webClientCreator" class="com.abc.mypackage.CreateWebClient"/> - 基于上述辅助Bean,通过
factory-bean和factory-method属性,注册真正的WebClient类型Bean:<beans:bean id="customWebClient" factory-bean="webClientCreator" factory-method="createWebClient"/> - 保持
outbound-gateway的web-client="customWebClient"配置不变即可。
这样配置后,customWebClient Bean的类型就是WebClient,可以被WebFluxRequestExecutingMessageHandler正确注入使用,同时无需修改CreateWebClient的结构。
内容的提问来源于stack exchange,提问作者ProblemSolver
相关产品推荐
相关产品推荐

