Improve tests for detection of @MVC annotations

Issue: SPR-9601
master
Rossen Stoyanchev 12 years ago
parent 060b37ca8d
commit 7c6a1a1bf0
  1. 48
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HandlerMethodAnnotationDetectionTests.java

@ -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…
Cancel
Save