Skip to content

Commit ebccfd0

Browse files
committed
MVC Java config protected factory methods
This change exposes protected methods for instantiating sub-classes of RequestMappingHandlerAdapter and ExceptonHandlerExceptionResolver similar to the existing method for RequestMappingHandlerMapping.
1 parent 9cc518d commit ebccfd0

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 the original author or authors.
2+
* Copyright 2002-2016 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -480,7 +480,7 @@ public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
480480
List<HandlerMethodReturnValueHandler> returnValueHandlers = new ArrayList<HandlerMethodReturnValueHandler>();
481481
addReturnValueHandlers(returnValueHandlers);
482482

483-
RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();
483+
RequestMappingHandlerAdapter adapter = createRequestMappingHandlerAdapter();
484484
adapter.setContentNegotiationManager(mvcContentNegotiationManager());
485485
adapter.setMessageConverters(getMessageConverters());
486486
adapter.setWebBindingInitializer(getConfigurableWebBindingInitializer());
@@ -512,6 +512,14 @@ public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
512512
return adapter;
513513
}
514514

515+
/**
516+
* Protected method for plugging in a custom sub-class of
517+
* {@link RequestMappingHandlerAdapter}.
518+
*/
519+
protected RequestMappingHandlerAdapter createRequestMappingHandlerAdapter() {
520+
return new RequestMappingHandlerAdapter();
521+
}
522+
515523
/**
516524
* Return the {@link ConfigurableWebBindingInitializer} to use for
517525
* initializing all {@link WebDataBinder} instances.
@@ -810,25 +818,33 @@ protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver>
810818
* </ul>
811819
*/
812820
protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
813-
ExceptionHandlerExceptionResolver exceptionHandlerExceptionResolver = new ExceptionHandlerExceptionResolver();
814-
exceptionHandlerExceptionResolver.setContentNegotiationManager(mvcContentNegotiationManager());
815-
exceptionHandlerExceptionResolver.setMessageConverters(getMessageConverters());
821+
ExceptionHandlerExceptionResolver exceptionHandlerResolver = createExceptionHandlerExceptionResolver();
822+
exceptionHandlerResolver.setContentNegotiationManager(mvcContentNegotiationManager());
823+
exceptionHandlerResolver.setMessageConverters(getMessageConverters());
816824
if (jackson2Present) {
817825
List<ResponseBodyAdvice<?>> interceptors = new ArrayList<ResponseBodyAdvice<?>>();
818826
interceptors.add(new JsonViewResponseBodyAdvice());
819-
exceptionHandlerExceptionResolver.setResponseBodyAdvice(interceptors);
827+
exceptionHandlerResolver.setResponseBodyAdvice(interceptors);
820828
}
821-
exceptionHandlerExceptionResolver.setApplicationContext(this.applicationContext);
822-
exceptionHandlerExceptionResolver.afterPropertiesSet();
823-
exceptionResolvers.add(exceptionHandlerExceptionResolver);
829+
exceptionHandlerResolver.setApplicationContext(this.applicationContext);
830+
exceptionHandlerResolver.afterPropertiesSet();
831+
exceptionResolvers.add(exceptionHandlerResolver);
824832

825-
ResponseStatusExceptionResolver responseStatusExceptionResolver = new ResponseStatusExceptionResolver();
826-
responseStatusExceptionResolver.setMessageSource(this.applicationContext);
827-
exceptionResolvers.add(responseStatusExceptionResolver);
833+
ResponseStatusExceptionResolver responseStatusResolver = new ResponseStatusExceptionResolver();
834+
responseStatusResolver.setMessageSource(this.applicationContext);
835+
exceptionResolvers.add(responseStatusResolver);
828836

829837
exceptionResolvers.add(new DefaultHandlerExceptionResolver());
830838
}
831839

840+
/**
841+
* Protected method for plugging in a custom sub-class of
842+
* {@link ExceptionHandlerExceptionResolver}.
843+
*/
844+
protected ExceptionHandlerExceptionResolver createExceptionHandlerExceptionResolver() {
845+
return new ExceptionHandlerExceptionResolver();
846+
}
847+
832848
/**
833849
* Register a {@link ViewResolverComposite} that contains a chain of view resolvers
834850
* to use for view resolution.

0 commit comments

Comments
 (0)