Apply RSocketConnectorConfigurer beans to RSocketRequester.Builder

See gh-26341
This commit is contained in:
nguyensach
2021-05-02 23:39:16 +09:00
committed by Stephane Nicoll
parent 7879adf5f2
commit 850c653862
2 changed files with 27 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.rsocket;
import io.rsocket.transport.netty.server.TcpServerTransport;
import reactor.netty.http.server.HttpServer;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -26,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.messaging.rsocket.RSocketConnectorConfigurer;
import org.springframework.messaging.rsocket.RSocketRequester;
import org.springframework.messaging.rsocket.RSocketStrategies;
@@ -37,6 +39,7 @@ import org.springframework.messaging.rsocket.RSocketStrategies;
* requester instances with different configurations.
*
* @author Brian Clozel
* @author Nguyen Bao Sach
* @since 2.2.0
*/
@Configuration(proxyBeanMethods = false)
@@ -47,8 +50,11 @@ public class RSocketRequesterAutoConfiguration {
@Bean
@Scope("prototype")
@ConditionalOnMissingBean
public RSocketRequester.Builder rSocketRequesterBuilder(RSocketStrategies strategies) {
return RSocketRequester.builder().rsocketStrategies(strategies);
public RSocketRequester.Builder rSocketRequesterBuilder(RSocketStrategies strategies,
ObjectProvider<RSocketConnectorConfigurer> connectorConfigurers) {
return connectorConfigurers.orderedStream()
.collect(RSocketRequester::builder, RSocketRequester.Builder::rsocketConnector, (first, second) -> {
}).rsocketStrategies(strategies);
}
}

View File

@@ -16,14 +16,17 @@
package org.springframework.boot.autoconfigure.rsocket;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.rsocket.RSocketConnectorConfigurer;
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.mockito.Mockito.mock;
@@ -31,6 +34,7 @@ import static org.mockito.Mockito.mock;
* Tests for {@link RSocketRequesterAutoConfiguration}
*
* @author Brian Clozel
* @author Nguyen Bao Sach
*/
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)
static class CustomRSocketRequesterBuilder {