Improve tests for detection of @MVC annotations
Issue: SPR-9601
This commit is contained in:
parent
060b37ca8d
commit
7c6a1a1bf0
|
|
@ -19,20 +19,25 @@ package org.springframework.web.servlet.mvc.method.annotation;
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
|
||||
import org.aopalliance.aop.Advice;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
import org.springframework.aop.Pointcut;
|
||||
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
||||
import org.springframework.aop.interceptor.SimpleTraceInterceptor;
|
||||
import org.springframework.aop.support.DefaultPointcutAdvisor;
|
||||
import org.springframework.aop.support.StaticMethodMatcherPointcut;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
|
@ -91,21 +96,29 @@ public class HandlerMethodAnnotationDetectionTests {
|
|||
|
||||
private ExceptionHandlerExceptionResolver exceptionResolver = new ExceptionHandlerExceptionResolver();
|
||||
|
||||
public HandlerMethodAnnotationDetectionTests(Class<?> controllerType, boolean useAutoProxy) {
|
||||
public HandlerMethodAnnotationDetectionTests(final Class<?> controllerType, boolean useAutoProxy) {
|
||||
GenericWebApplicationContext context = new GenericWebApplicationContext();
|
||||
context.registerBeanDefinition("controller", new RootBeanDefinition(controllerType));
|
||||
context.registerBeanDefinition("handlerMapping", new RootBeanDefinition(RequestMappingHandlerMapping.class));
|
||||
context.registerBeanDefinition("handlerAdapter", new RootBeanDefinition(RequestMappingHandlerAdapter.class));
|
||||
context.registerBeanDefinition("exceptionResolver", new RootBeanDefinition(ExceptionHandlerExceptionResolver.class));
|
||||
if (useAutoProxy) {
|
||||
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
||||
autoProxyCreator.setBeanFactory(context.getBeanFactory());
|
||||
context.getBeanFactory().addBeanPostProcessor(autoProxyCreator);
|
||||
context.getBeanFactory().registerSingleton("advisor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor()));
|
||||
context.registerBeanDefinition("controllerAdvice", new RootBeanDefinition(ControllerAdvice.class));
|
||||
}
|
||||
context.refresh();
|
||||
|
||||
handlerMapping.setApplicationContext(context);
|
||||
handlerMapping.afterPropertiesSet();
|
||||
handlerAdapter.afterPropertiesSet();
|
||||
exceptionResolver.afterPropertiesSet();
|
||||
this.handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
|
||||
this.handlerAdapter = context.getBean(RequestMappingHandlerAdapter.class);
|
||||
this.exceptionResolver = context.getBean(ExceptionHandlerExceptionResolver.class);
|
||||
}
|
||||
|
||||
class TestPointcut extends StaticMethodMatcherPointcut {
|
||||
public boolean matches(Method method, Class<?> clazz) {
|
||||
return method.getName().equals("hashCode");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -232,11 +245,11 @@ public class HandlerMethodAnnotationDetectionTests {
|
|||
/**
|
||||
* CONTROLLER WITH INTERFACE
|
||||
*
|
||||
* No AOP:
|
||||
* All annotations can be on interface methods except parameter annotations.
|
||||
*
|
||||
* JDK Dynamic proxy:
|
||||
* All annotations must be on the interface.
|
||||
*
|
||||
* Without AOP:
|
||||
* Annotations can be on interface methods except parameter annotations.
|
||||
*/
|
||||
static class InterfaceController implements MappingInterface {
|
||||
|
||||
|
|
@ -391,4 +404,21 @@ public class HandlerMethodAnnotationDetectionTests {
|
|||
static class SupportClassController extends MappingSupportClass {
|
||||
}
|
||||
|
||||
|
||||
static class ControllerAdvice extends DefaultPointcutAdvisor {
|
||||
|
||||
public ControllerAdvice() {
|
||||
super(getControllerPointcut(), new SimpleTraceInterceptor());
|
||||
}
|
||||
|
||||
private static StaticMethodMatcherPointcut getControllerPointcut() {
|
||||
return new StaticMethodMatcherPointcut() {
|
||||
public boolean matches(Method method, Class<?> targetClass) {
|
||||
return ((AnnotationUtils.findAnnotation(targetClass, Controller.class) != null) ||
|
||||
(AnnotationUtils.findAnnotation(targetClass, RequestMapping.class) != null));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue