diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketStrategies.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketStrategies.java index 56f50a318b..1de258de66 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketStrategies.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketStrategies.java @@ -94,6 +94,17 @@ final class DefaultRSocketStrategies implements RSocketStrategies { private DataBufferFactory dataBufferFactory; + public DefaultRSocketStrategiesBuilder() { + } + + public DefaultRSocketStrategiesBuilder(RSocketStrategies other) { + this.encoders.addAll(other.encoders()); + this.decoders.addAll(other.decoders()); + this.adapterRegistry = other.reactiveAdapterRegistry(); + this.dataBufferFactory = other.dataBufferFactory(); + } + + @Override public Builder encoder(Encoder... encoders) { this.encoders.addAll(Arrays.asList(encoders)); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketStrategies.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketStrategies.java index f0b6fd3772..9ef05661b7 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketStrategies.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketStrategies.java @@ -105,6 +105,14 @@ public interface RSocketStrategies { return new DefaultRSocketStrategies.DefaultRSocketStrategiesBuilder(); } + /** + * Return a builder to create a new {@link RSocketStrategies} instance + * replicated from the current instance. + */ + default Builder mutate() { + return new DefaultRSocketStrategies.DefaultRSocketStrategiesBuilder(this); + } + /** * The builder options for creating {@code RSocketStrategies}. @@ -117,17 +125,17 @@ public interface RSocketStrategies { */ Builder encoder(Encoder... encoder); + /** + * Access and manipulate the list of configured {@link #encoder encoders}. + */ + Builder encoders(Consumer>> consumer); + /** * Add decoders for de-serializing Objects. *

By default this is empty. */ Builder decoder(Decoder... decoder); - /** - * Access and manipulate the list of configured {@link #encoder encoders}. - */ - Builder encoders(Consumer>> consumer); - /** * Access and manipulate the list of configured {@link #encoder decoders}. */ @@ -137,7 +145,7 @@ public interface RSocketStrategies { * Configure the registry for reactive type support. This can be used to * to adapt to, and/or determine the semantics of a given * {@link org.reactivestreams.Publisher Publisher}. - *

By default this {@link ReactiveAdapterRegistry#sharedInstance}. + *

By default this {@link ReactiveAdapterRegistry#getSharedInstance()}. * @param registry the registry to use */ Builder reactiveAdapterStrategy(ReactiveAdapterRegistry registry);