Detect controller methods via InitializingBean hook
Previously RequestMappingHandlerMapping detected @RequestMapping methods through an initApplicationContext() hook. However, the HandlerMapping may not have been fully set up with all its dependencies at that point including settings like useSuffixPattern and others. This change moves the detection @RequestMapping methods to an InitializingBean.afterPropertiesSet() hook. Issue: SPR-9371
This commit is contained in:
@@ -83,6 +83,7 @@ public class WebMvcConfigurationSupportTests {
|
||||
assertEquals(0, handlerMapping.getOrder());
|
||||
|
||||
handlerMapping.setApplicationContext(cxt);
|
||||
handlerMapping.afterPropertiesSet();
|
||||
HandlerExecutionChain chain = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/"));
|
||||
assertNotNull(chain.getInterceptors());
|
||||
assertEquals(ConversionServiceExposingInterceptor.class, chain.getInterceptors()[0].getClass());
|
||||
@@ -204,6 +205,7 @@ public class WebMvcConfigurationSupportTests {
|
||||
|
||||
RequestMappingHandlerMapping rmHandlerMapping = webConfig.requestMappingHandlerMapping();
|
||||
rmHandlerMapping.setApplicationContext(appCxt);
|
||||
rmHandlerMapping.afterPropertiesSet();
|
||||
HandlerExecutionChain chain = rmHandlerMapping.getHandler(new MockHttpServletRequest("GET", "/"));
|
||||
assertNotNull(chain.getInterceptors());
|
||||
assertEquals(2, chain.getInterceptors().length);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -82,7 +82,7 @@ public class HandlerMethodMappingTests {
|
||||
HandlerMethod result = mapping.getHandlerInternal(new MockHttpServletRequest("GET", "/foo"));
|
||||
assertEquals(method1, result.getMethod());
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = IllegalStateException.class)
|
||||
public void ambiguousMatch() throws Exception {
|
||||
mapping.registerHandlerMethod(handler, method1, "/f?o");
|
||||
@@ -95,24 +95,26 @@ public class HandlerMethodMappingTests {
|
||||
public void testDetectHandlerMethodsInAncestorContexts() {
|
||||
StaticApplicationContext cxt = new StaticApplicationContext();
|
||||
cxt.registerSingleton("myHandler", MyHandler.class);
|
||||
|
||||
|
||||
AbstractHandlerMethodMapping<String> mapping1 = new MyHandlerMethodMapping();
|
||||
mapping1.setApplicationContext(new StaticApplicationContext(cxt));
|
||||
mapping1.afterPropertiesSet();
|
||||
|
||||
assertEquals(0, mapping1.getHandlerMethods().size());
|
||||
|
||||
AbstractHandlerMethodMapping<String> mapping2 = new MyHandlerMethodMapping();
|
||||
mapping2.setDetectHandlerMethodsInAncestorContexts(true);
|
||||
mapping2.setApplicationContext(new StaticApplicationContext(cxt));
|
||||
mapping2.afterPropertiesSet();
|
||||
|
||||
assertEquals(2, mapping2.getHandlerMethods().size());
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static class MyHandlerMethodMapping extends AbstractHandlerMethodMapping<String> {
|
||||
|
||||
private UrlPathHelper pathHelper = new UrlPathHelper();
|
||||
|
||||
|
||||
private PathMatcher pathMatcher = new AntPathMatcher();
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -103,6 +103,7 @@ public class HandlerMethodAnnotationDetectionTests {
|
||||
context.refresh();
|
||||
|
||||
handlerMapping.setApplicationContext(context);
|
||||
handlerMapping.afterPropertiesSet();
|
||||
handlerAdapter.afterPropertiesSet();
|
||||
exceptionResolver.afterPropertiesSet();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user