diff --git a/spring-core/src/main/java/org/springframework/core/Conventions.java b/spring-core/src/main/java/org/springframework/core/Conventions.java index 2122cd37d7..3b0de6ea98 100644 --- a/spring-core/src/main/java/org/springframework/core/Conventions.java +++ b/spring-core/src/main/java/org/springframework/core/Conventions.java @@ -59,7 +59,7 @@ public abstract class Conventions { } private static final ReactiveAdapterRegistry reactiveAdapterRegistry = - new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry.getSharedInstance(); /** diff --git a/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java b/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java index 0e6bfa9a93..415df656c0 100644 --- a/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java +++ b/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java @@ -33,7 +33,10 @@ import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; -import static org.springframework.core.ReactiveTypeDescriptor.*; +import static org.springframework.core.ReactiveTypeDescriptor.multiValue; +import static org.springframework.core.ReactiveTypeDescriptor.noValue; +import static org.springframework.core.ReactiveTypeDescriptor.singleOptionalValue; +import static org.springframework.core.ReactiveTypeDescriptor.singleRequiredValue; /** * A registry of adapters to adapt a Reactive Streams {@link Publisher} to/from @@ -50,6 +53,9 @@ import static org.springframework.core.ReactiveTypeDescriptor.*; */ public class ReactiveAdapterRegistry { + @Nullable + private static volatile ReactiveAdapterRegistry sharedInstance; + private final boolean reactorPresent; private final List adapters = new ArrayList<>(32); @@ -98,6 +104,31 @@ public class ReactiveAdapterRegistry { } + /** + * Return a shared default {@code ReactiveAdapterRegistry} instance, lazily + * building it once needed. + *

NOTE: We highly recommend passing a long-lived, pre-configured + * {@code ReactiveAdapterRegistry} instance for customization purposes. + * This accessor is only meant as a fallback for code paths that want to + * fall back on a default instance if one isn't provided. + * @return the shared {@code ReactiveAdapterRegistry} instance (never {@code null}) + * @since 5.0.2 + */ + public static ReactiveAdapterRegistry getSharedInstance() { + ReactiveAdapterRegistry ar = sharedInstance; + if (ar == null) { + synchronized (ReactiveAdapterRegistry.class) { + ar = sharedInstance; + if (ar == null) { + ar = new ReactiveAdapterRegistry(); + sharedInstance = ar; + } + } + } + return ar; + } + + /** * Whether the registry has any adapters which would be the case if any of * Reactor, RxJava 2, or RxJava 1 (+ RxJava Reactive Streams bridge) are diff --git a/spring-core/src/test/java/org/springframework/core/convert/support/ReactiveAdapterRegistryTests.java b/spring-core/src/test/java/org/springframework/core/convert/support/ReactiveAdapterRegistryTests.java index f20d3a2441..24e093ad32 100644 --- a/spring-core/src/test/java/org/springframework/core/convert/support/ReactiveAdapterRegistryTests.java +++ b/spring-core/src/test/java/org/springframework/core/convert/support/ReactiveAdapterRegistryTests.java @@ -50,7 +50,7 @@ import static org.junit.Assert.assertTrue; @SuppressWarnings("unchecked") public class ReactiveAdapterRegistryTests { - private final ReactiveAdapterRegistry registry = new ReactiveAdapterRegistry(); + private final ReactiveAdapterRegistry registry = ReactiveAdapterRegistry.getSharedInstance(); @Test diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java index 362e1c807f..f043ab9c9a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java @@ -66,7 +66,7 @@ public class InvocableHandlerMethod extends HandlerMethod { private ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); - private ReactiveAdapterRegistry reactiveAdapterRegistry = new ReactiveAdapterRegistry(); + private ReactiveAdapterRegistry reactiveAdapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); public InvocableHandlerMethod(HandlerMethod handlerMethod) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageReaderArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageReaderArgumentResolver.java index 207190095e..9cf06c9cb7 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageReaderArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageReaderArgumentResolver.java @@ -81,7 +81,7 @@ public abstract class AbstractMessageReaderArgumentResolver extends HandlerMetho * @param readers readers to convert from the request body */ protected AbstractMessageReaderArgumentResolver(List> readers) { - this(readers, new ReactiveAdapterRegistry()); + this(readers, ReactiveAdapterRegistry.getSharedInstance()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java index 211977e41e..fa9d758dc3 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java @@ -60,7 +60,7 @@ public abstract class AbstractMessageWriterResultHandler extends HandlerResultHa protected AbstractMessageWriterResultHandler(List> messageWriters, RequestedContentTypeResolver contentTypeResolver) { - this(messageWriters, contentTypeResolver, new ReactiveAdapterRegistry()); + this(messageWriters, contentTypeResolver, ReactiveAdapterRegistry.getSharedInstance()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java index c6136e0717..da08b95600 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestMappingHandlerAdapter.java @@ -163,7 +163,7 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, Application this.argumentResolverConfigurer = new ArgumentResolverConfigurer(); } if (this.reactiveAdapterRegistry == null) { - this.reactiveAdapterRegistry = new ReactiveAdapterRegistry(); + this.reactiveAdapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); } this.methodResolver = new ControllerMethodResolver(this.argumentResolverConfigurer, diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandler.java index 8439d6ad47..df57b638f8 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandler.java @@ -56,7 +56,7 @@ public class ResponseBodyResultHandler extends AbstractMessageWriterResultHandle public ResponseBodyResultHandler(List> writers, RequestedContentTypeResolver resolver) { - this(writers, resolver, new ReactiveAdapterRegistry()); + this(writers, resolver, ReactiveAdapterRegistry.getSharedInstance()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java index b17771cf81..f8ea60718c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java @@ -63,7 +63,7 @@ public class ResponseEntityResultHandler extends AbstractMessageWriterResultHand public ResponseEntityResultHandler(List> writers, RequestedContentTypeResolver resolver) { - this(writers, resolver, new ReactiveAdapterRegistry()); + this(writers, resolver, ReactiveAdapterRegistry.getSharedInstance()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java index cefa7c44af..516c1e06a3 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java @@ -70,7 +70,7 @@ public abstract class AbstractView implements View, ApplicationContextAware { public AbstractView() { - this(new ReactiveAdapterRegistry()); + this(ReactiveAdapterRegistry.getSharedInstance()); } public AbstractView(ReactiveAdapterRegistry registry) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java index 7841d5f6bf..0753164335 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java @@ -101,7 +101,7 @@ public class ViewResolutionResultHandler extends HandlerResultHandlerSupport public ViewResolutionResultHandler(List viewResolvers, RequestedContentTypeResolver contentTypeResolver) { - this(viewResolvers, contentTypeResolver, new ReactiveAdapterRegistry()); + this(viewResolvers, contentTypeResolver, ReactiveAdapterRegistry.getSharedInstance()); } /** diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/HandlerResultHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/HandlerResultHandlerTests.java index 1f66a81200..37efeec8e1 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/HandlerResultHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/HandlerResultHandlerTests.java @@ -110,7 +110,7 @@ public class HandlerResultHandlerTests { } public TestResultHandler(RequestedContentTypeResolver contentTypeResolver) { - super(contentTypeResolver, new ReactiveAdapterRegistry()); + super(contentTypeResolver, ReactiveAdapterRegistry.getSharedInstance()); } } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolverTests.java index d2eb2cae40..267e12db95 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolverTests.java @@ -76,7 +76,7 @@ public class ControllerMethodResolverTests { applicationContext.refresh(); this.methodResolver = new ControllerMethodResolver( - resolvers, codecs.getReaders(), new ReactiveAdapterRegistry(), applicationContext); + resolvers, codecs.getReaders(), ReactiveAdapterRegistry.getSharedInstance(), applicationContext); Method method = ResolvableMethod.on(TestController.class).mockCall(TestController::handle).method(); this.handlerMethod = new HandlerMethod(new TestController(), method); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/CookieValueMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/CookieValueMethodArgumentResolverTests.java index fdbd15fd27..f845bf35ca 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/CookieValueMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/CookieValueMethodArgumentResolverTests.java @@ -62,7 +62,7 @@ public class CookieValueMethodArgumentResolverTests { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new CookieValueMethodArgumentResolver(context.getBeanFactory(), adapterRegistry); this.bindingContext = new BindingContext(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolverTests.java index 88bb9fb072..5bfcd7719a 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolverTests.java @@ -47,7 +47,7 @@ import static org.junit.Assert.assertTrue; public class ErrorsMethodArgumentResolverTests { private final ErrorsMethodArgumentResolver resolver = - new ErrorsMethodArgumentResolver(new ReactiveAdapterRegistry()); + new ErrorsMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private final BindingContext bindingContext = new BindingContext(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ExpressionValueMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ExpressionValueMethodArgumentResolverTests.java index cb8ae2bb75..696f0e6523 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ExpressionValueMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ExpressionValueMethodArgumentResolverTests.java @@ -56,7 +56,7 @@ public class ExpressionValueMethodArgumentResolverTests { public void setup() throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new ExpressionValueMethodArgumentResolver(context.getBeanFactory(), adapterRegistry); Method method = ReflectionUtils.findMethod(getClass(), "params", (Class[]) null); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolverTests.java index 6f9a3f4292..1d032ef001 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolverTests.java @@ -75,7 +75,7 @@ public class HttpEntityArgumentResolverTests { private HttpEntityArgumentResolver createResolver() { List> readers = new ArrayList<>(); readers.add(new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(true))); - return new HttpEntityArgumentResolver(readers, new ReactiveAdapterRegistry()); + return new HttpEntityArgumentResolver(readers, ReactiveAdapterRegistry.getSharedInstance()); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/InitBinderBindingContextTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/InitBinderBindingContextTests.java index 27da2f0e31..d196127431 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/InitBinderBindingContextTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/InitBinderBindingContextTests.java @@ -114,7 +114,7 @@ public class InitBinderBindingContextTests { public void createBinderTypeConversion() throws Exception { MockServerHttpRequest request = MockServerHttpRequest.get("/path?requestParam=22").build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.argumentResolvers.add(new RequestParamMethodArgumentResolver(null, adapterRegistry, false)); BindingContext context = createBindingContext("initBinderTypeConversion", WebDataBinder.class, int.class); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMapMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMapMethodArgumentResolverTests.java index a94c461806..ae32a764d0 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMapMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMapMethodArgumentResolverTests.java @@ -48,7 +48,7 @@ import static org.springframework.web.method.MvcAnnotationPredicates.matrixAttri public class MatrixVariablesMapMethodArgumentResolverTests { private final MatrixVariableMapMethodArgumentResolver resolver = - new MatrixVariableMapMethodArgumentResolver(new ReactiveAdapterRegistry()); + new MatrixVariableMapMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private final MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/")); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMethodArgumentResolverTests.java index ae7131fd5b..fd4a640819 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MatrixVariablesMethodArgumentResolverTests.java @@ -49,7 +49,7 @@ import static org.springframework.web.method.MvcAnnotationPredicates.matrixAttri public class MatrixVariablesMethodArgumentResolverTests { private MatrixVariableMethodArgumentResolver resolver = - new MatrixVariableMethodArgumentResolver(null, new ReactiveAdapterRegistry()); + new MatrixVariableMethodArgumentResolver(null, ReactiveAdapterRegistry.getSharedInstance()); private final MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/")); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelArgumentResolverTests.java index 006d23f8c9..b71f9a1d89 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelArgumentResolverTests.java @@ -40,7 +40,8 @@ import static org.springframework.mock.http.server.reactive.test.MockServerHttpR */ public class ModelArgumentResolverTests { - private final ModelArgumentResolver resolver = new ModelArgumentResolver(new ReactiveAdapterRegistry()); + private final ModelArgumentResolver resolver = + new ModelArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private final ServerWebExchange exchange = MockServerWebExchange.from(get("/")); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java index aacc57c037..b04c7a2c6e 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolverTests.java @@ -75,7 +75,7 @@ public class ModelAttributeMethodArgumentResolverTests { @Test public void supports() throws Exception { ModelAttributeMethodArgumentResolver resolver = - new ModelAttributeMethodArgumentResolver(new ReactiveAdapterRegistry(), false); + new ModelAttributeMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance(), false); MethodParameter param = this.testMethod.annotPresent(ModelAttribute.class).arg(Foo.class); assertTrue(resolver.supportsParameter(param)); @@ -93,7 +93,7 @@ public class ModelAttributeMethodArgumentResolverTests { @Test public void supportsWithDefaultResolution() throws Exception { ModelAttributeMethodArgumentResolver resolver = - new ModelAttributeMethodArgumentResolver(new ReactiveAdapterRegistry(), true); + new ModelAttributeMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance(), true); MethodParameter param = this.testMethod.annotNotPresent(ModelAttribute.class).arg(Foo.class); assertTrue(resolver.supportsParameter(param)); @@ -306,7 +306,7 @@ public class ModelAttributeMethodArgumentResolverTests { private ModelAttributeMethodArgumentResolver createResolver() { - return new ModelAttributeMethodArgumentResolver(new ReactiveAdapterRegistry(), false); + return new ModelAttributeMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance(), false); } private ServerWebExchange postForm(String formData) throws URISyntaxException { diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelInitializerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelInitializerTests.java index 9aa39ca050..0438026340 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelInitializerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ModelInitializerTests.java @@ -73,7 +73,7 @@ public class ModelInitializerTests { @Before public void setUp() throws Exception { - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); ArgumentResolverConfigurer resolverConfigurer = new ArgumentResolverConfigurer(); resolverConfigurer.addCustomResolver(new ModelArgumentResolver(adapterRegistry)); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMapMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMapMethodArgumentResolverTests.java index 331dcd20a0..52ffe8beca 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMapMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMapMethodArgumentResolverTests.java @@ -58,7 +58,7 @@ public class PathVariableMapMethodArgumentResolverTests { @Before public void setup() throws Exception { - this.resolver = new PathVariableMapMethodArgumentResolver(new ReactiveAdapterRegistry()); + this.resolver = new PathVariableMapMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); Method method = ReflectionUtils.findMethod(getClass(), "handle", (Class[]) null); this.paramMap = new MethodParameter(method, 0); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMethodArgumentResolverTests.java index 281c004af8..3c4afed59c 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PathVariableMethodArgumentResolverTests.java @@ -65,7 +65,7 @@ public class PathVariableMethodArgumentResolverTests { @Before public void setup() throws Exception { - this.resolver = new PathVariableMethodArgumentResolver(null, new ReactiveAdapterRegistry()); + this.resolver = new PathVariableMethodArgumentResolver(null, ReactiveAdapterRegistry.getSharedInstance()); Method method = ReflectionUtils.findMethod(getClass(), "handle", (Class[]) null); paramNamedString = new SynthesizingMethodParameter(method, 0); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PrincipalArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PrincipalArgumentResolverTests.java index a2b89c9198..2c995d650f 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PrincipalArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/PrincipalArgumentResolverTests.java @@ -39,7 +39,7 @@ import static org.junit.Assert.assertTrue; public class PrincipalArgumentResolverTests { private final PrincipalArgumentResolver resolver = - new PrincipalArgumentResolver(new ReactiveAdapterRegistry()); + new PrincipalArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolverTests.java index 774a4c070c..3404c38926 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolverTests.java @@ -64,7 +64,7 @@ public class RequestAttributeMethodArgumentResolverTests { public void setup() throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); - ReactiveAdapterRegistry registry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry registry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new RequestAttributeMethodArgumentResolver(context.getBeanFactory(), registry); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java index a9494a8130..3346c649c1 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolverTests.java @@ -70,7 +70,7 @@ public class RequestBodyArgumentResolverTests { public void setup() { List> readers = new ArrayList<>(); readers.add(new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(true))); - this.resolver = new RequestBodyArgumentResolver(readers, new ReactiveAdapterRegistry()); + this.resolver = new RequestBodyArgumentResolver(readers, ReactiveAdapterRegistry.getSharedInstance()); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMapMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMapMethodArgumentResolverTests.java index e7cfd8c1c7..a4d1a95fdd 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMapMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMapMethodArgumentResolverTests.java @@ -58,7 +58,7 @@ public class RequestHeaderMapMethodArgumentResolverTests { @Before public void setup() throws Exception { - resolver = new RequestHeaderMapMethodArgumentResolver(new ReactiveAdapterRegistry()); + resolver = new RequestHeaderMapMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); Method method = ReflectionUtils.findMethod(getClass(), "params", (Class[]) null); paramMap = new SynthesizingMethodParameter(method, 0); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMethodArgumentResolverTests.java index d136a60882..06c42237a9 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestHeaderMethodArgumentResolverTests.java @@ -73,7 +73,7 @@ public class RequestHeaderMethodArgumentResolverTests { public void setup() throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new RequestHeaderMethodArgumentResolver(context.getBeanFactory(), adapterRegistry); ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMapMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMapMethodArgumentResolverTests.java index 2b60c9ee70..7b27abcc07 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMapMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMapMethodArgumentResolverTests.java @@ -46,7 +46,7 @@ import static org.springframework.web.method.MvcAnnotationPredicates.requestPara public class RequestParamMapMethodArgumentResolverTests { private final RequestParamMapMethodArgumentResolver resolver = - new RequestParamMapMethodArgumentResolver(new ReactiveAdapterRegistry()); + new RequestParamMapMethodArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverTests.java index 6cbe2a0e61..f98c8be6e1 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverTests.java @@ -63,7 +63,7 @@ public class RequestParamMethodArgumentResolverTests { @Before public void setup() throws Exception { - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new RequestParamMethodArgumentResolver(null, adapterRegistry, true); ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); @@ -100,7 +100,7 @@ public class RequestParamMethodArgumentResolverTests { @Test public void doesNotSupportParameterWithDefaultResolutionTurnedOff() { - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new RequestParamMethodArgumentResolver(null, adapterRegistry, false); MethodParameter param = this.testMethod.annotNotPresent(RequestParam.class).arg(String.class); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java index 2768313ab4..661c8462d4 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java @@ -50,7 +50,7 @@ import static org.junit.Assert.fail; public class ServerWebExchangeArgumentResolverTests { private final ServerWebExchangeArgumentResolver resolver = - new ServerWebExchangeArgumentResolver(new ReactiveAdapterRegistry()); + new ServerWebExchangeArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private final MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path")); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/SessionAttributeMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/SessionAttributeMethodArgumentResolverTests.java index 5b2dbecbe4..99b02212a8 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/SessionAttributeMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/SessionAttributeMethodArgumentResolverTests.java @@ -75,7 +75,7 @@ public class SessionAttributeMethodArgumentResolverTests { public void setup() throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); - ReactiveAdapterRegistry adapterRegistry = new ReactiveAdapterRegistry(); + ReactiveAdapterRegistry adapterRegistry = ReactiveAdapterRegistry.getSharedInstance(); this.resolver = new SessionAttributeMethodArgumentResolver(context.getBeanFactory(), adapterRegistry); this.session = mock(WebSession.class); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionArgumentResolverTests.java index ee4354087a..23f89de4d7 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionArgumentResolverTests.java @@ -44,7 +44,7 @@ import static org.mockito.Mockito.mock; public class WebSessionArgumentResolverTests { private final WebSessionArgumentResolver resolver = - new WebSessionArgumentResolver(new ReactiveAdapterRegistry()); + new WebSessionArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); private ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build(); diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverKotlinTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverKotlinTests.kt index 09ab71e07f..bc9efc3142 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverKotlinTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/result/method/annotation/RequestParamMethodArgumentResolverKotlinTests.kt @@ -49,7 +49,7 @@ class RequestParamMethodArgumentResolverKotlinTests { @Before fun setup() { - this.resolver = RequestParamMethodArgumentResolver(null, ReactiveAdapterRegistry(), true) + this.resolver = RequestParamMethodArgumentResolver(null, ReactiveAdapterRegistry.getSharedInstance(), true) val initializer = ConfigurableWebBindingInitializer() initializer.conversionService = DefaultFormattingConversionService() bindingContext = BindingContext(initializer) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java index 9d11306645..c3bcb304a8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java @@ -83,7 +83,7 @@ class ReactiveTypeHandler { public ReactiveTypeHandler() { - this(new ReactiveAdapterRegistry(), new SyncTaskExecutor(), new ContentNegotiationManager()); + this(ReactiveAdapterRegistry.getSharedInstance(), new SyncTaskExecutor(), new ContentNegotiationManager()); } ReactiveTypeHandler(ReactiveAdapterRegistry registry, TaskExecutor executor, diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java index 837c12bf79..e4772ff30f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java @@ -152,7 +152,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter private DeferredResultProcessingInterceptor[] deferredResultInterceptors = new DeferredResultProcessingInterceptor[0]; - private ReactiveAdapterRegistry reactiveRegistry = new ReactiveAdapterRegistry(); + private ReactiveAdapterRegistry reactiveRegistry = ReactiveAdapterRegistry.getSharedInstance(); private boolean ignoreDefaultModelOnRedirect = false; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandlerTests.java index e98b0313e0..b9f5beaf0d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandlerTests.java @@ -80,7 +80,7 @@ public class ReactiveTypeHandlerTests { ContentNegotiationManagerFactoryBean factoryBean = new ContentNegotiationManagerFactoryBean(); factoryBean.afterPropertiesSet(); ContentNegotiationManager manager = factoryBean.getObject(); - this.handler = new ReactiveTypeHandler(new ReactiveAdapterRegistry(), new SyncTaskExecutor(), manager); + this.handler = new ReactiveTypeHandler(ReactiveAdapterRegistry.getSharedInstance(), new SyncTaskExecutor(), manager); resetRequest(); }