package org.springframework.web.servlet.handler.metadata;
import java.lang.annotation.Annotation;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.web.annotation.Controller;
import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping;
/**
* Abstract base for {@link org.springframework.web.servlet.HandlerMapping} implementations that map classes tagged with
* an annotation.
* <p/>
* By default the annotation is {@link Controller}, but this can be overriden in subclasses.
*
* @author Arjen Poutsma
*/
public abstract class AbstractAnnotationHandlerMapping extends AbstractHandlerMethodMapping
implements BeanPostProcessor {
public final Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean.getClass().getAnnotation(getHandlerAnnotationType()) != null) {
registerHandlerMethods(bean);
}
return bean;
}
public final Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/**
* Returns the 'handler' annotation type. Default is {@link Controller}.
*/
protected Class<? extends Annotation> getHandlerAnnotationType() {
return Controller.class;
}
}