Commit 850c6538 authored by nguyensach's avatar nguyensach Committed by Stephane Nicoll

Apply RSocketConnectorConfigurer beans to RSocketRequester.Builder

See gh-26341
parent 7879adf5
...@@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.rsocket; ...@@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.rsocket;
import io.rsocket.transport.netty.server.TcpServerTransport; import io.rsocket.transport.netty.server.TcpServerTransport;
import reactor.netty.http.server.HttpServer; import reactor.netty.http.server.HttpServer;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
...@@ -26,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean ...@@ -26,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.messaging.rsocket.RSocketConnectorConfigurer;
import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.messaging.rsocket.RSocketRequester;
import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.messaging.rsocket.RSocketStrategies;
...@@ -37,6 +39,7 @@ import org.springframework.messaging.rsocket.RSocketStrategies; ...@@ -37,6 +39,7 @@ import org.springframework.messaging.rsocket.RSocketStrategies;
* requester instances with different configurations. * requester instances with different configurations.
* *
* @author Brian Clozel * @author Brian Clozel
* @author Nguyen Bao Sach
* @since 2.2.0 * @since 2.2.0
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
...@@ -47,8 +50,11 @@ public class RSocketRequesterAutoConfiguration { ...@@ -47,8 +50,11 @@ public class RSocketRequesterAutoConfiguration {
@Bean @Bean
@Scope("prototype") @Scope("prototype")
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RSocketRequester.Builder rSocketRequesterBuilder(RSocketStrategies strategies) { public RSocketRequester.Builder rSocketRequesterBuilder(RSocketStrategies strategies,
return RSocketRequester.builder().rsocketStrategies(strategies); ObjectProvider<RSocketConnectorConfigurer> connectorConfigurers) {
return connectorConfigurers.orderedStream()
.collect(RSocketRequester::builder, RSocketRequester.Builder::rsocketConnector, (first, second) -> {
}).rsocketStrategies(strategies);
} }
} }
...@@ -16,14 +16,17 @@ ...@@ -16,14 +16,17 @@
package org.springframework.boot.autoconfigure.rsocket; package org.springframework.boot.autoconfigure.rsocket;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.rsocket.RSocketConnectorConfigurer;
import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.messaging.rsocket.RSocketRequester;
import static org.assertj.core.api.Assertions.as;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
...@@ -31,6 +34,7 @@ import static org.mockito.Mockito.mock; ...@@ -31,6 +34,7 @@ import static org.mockito.Mockito.mock;
* Tests for {@link RSocketRequesterAutoConfiguration} * Tests for {@link RSocketRequesterAutoConfiguration}
* *
* @author Brian Clozel * @author Brian Clozel
* @author Nguyen Bao Sach
*/ */
class RSocketRequesterAutoConfigurationTests { class RSocketRequesterAutoConfigurationTests {
...@@ -59,6 +63,21 @@ class RSocketRequesterAutoConfigurationTests { ...@@ -59,6 +63,21 @@ class RSocketRequesterAutoConfigurationTests {
}); });
} }
@Test
void rSocketConnectorConfigurersArePickedUp() {
RSocketConnectorConfigurer first = mock(RSocketConnectorConfigurer.class);
RSocketConnectorConfigurer second = mock(RSocketConnectorConfigurer.class);
this.contextRunner.withBean("firstRSocketConnectorConfigurer", RSocketConnectorConfigurer.class, () -> first)
.withBean("secondRSocketConnectorConfigurer", RSocketConnectorConfigurer.class, () -> second)
.run((context) -> {
assertThat(context).getBeans(RSocketConnectorConfigurer.class).hasSize(2);
RSocketRequester.Builder builder = context.getBean(RSocketRequester.Builder.class);
assertThat(builder).extracting("rsocketConnectorConfigurers", as(InstanceOfAssertFactories.LIST))
.containsExactly(first, second);
});
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class CustomRSocketRequesterBuilder { static class CustomRSocketRequesterBuilder {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment