Class DefaultAnnotationHandlerMapping
- java.lang.Object
- org.springframework.context.support.ApplicationObjectSupport
- org.springframework.web.portlet.handler.AbstractHandlerMapping
- org.springframework.web.portlet.handler.AbstractMapBasedHandlerMapping<PortletMode>
- org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping
- All Implemented Interfaces:
Aware,ApplicationContextAware,Ordered,HandlerMapping
public class DefaultAnnotationHandlerMapping extends AbstractMapBasedHandlerMapping<PortletMode>
Implementation of theHandlerMappinginterface that maps handlers based on portlet modes expressed through theRequestMappingannotation at the type or method level.Registered by default in
DispatcherPortlet. NOTE: If you define custom HandlerMapping beans in your DispatcherPortlet context, you need to add a DefaultAnnotationHandlerMapping bean explicitly, since custom HandlerMapping beans replace the default mapping strategies. Defining a DefaultAnnotationHandlerMapping also allows for registering custom interceptors:<bean class="org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> ... </property> </bean>Annotated controllers are usually marked with theControllerstereotype at the type level. This is not strictly necessary whenRequestMappingis applied at the type level (since such a handler usually implements theControllerinterface). However,Controlleris required for detectingRequestMappingannotations at the method level.NOTE: Method-level mappings are only allowed to narrow the mapping expressed at the class level (if any). A portlet mode in combination with specific parameter conditions needs to uniquely map onto one specific handler bean, not spread across multiple handler beans. It is strongly recommended to co-locate related handler methods into the same bean.
The
AnnotationMethodHandlerAdapteris responsible for processing annotated handler methods, as mapped by this HandlerMapping. ForRequestMappingat the type level, specific HandlerAdapters such asSimpleControllerHandlerAdapterapply.- Since:
- 2.5
- Author:
- Juergen Hoeller
- See Also:
RequestMapping,AnnotationMethodHandlerAdapter
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.web.portlet.handler.AbstractMapBasedHandlerMapping
AbstractMapBasedHandlerMapping.PortletRequestMappingPredicate
Field Summary
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor Summary
Constructors Constructor Description DefaultAnnotationHandlerMapping()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleandetectHandlerMethods(Class<?> handlerType, String beanName, RequestMapping typeMapping)Derive portlet mode mappings from the handler's method-level mappings.protected voiddetectHandlers()Register all handlers specified in the Portlet mode map for the corresponding modes.protected PortletModegetLookupKey(PortletRequest request)Uses the current PortletMode as lookup key.voidinitApplicationContext()Calls theregisterHandlersmethod in addition to the superclass's initialization.Methods inherited from class org.springframework.web.portlet.handler.AbstractMapBasedHandlerMapping
getHandlerInternal, registerHandler, registerHandler, registerHandlers, setLazyInitHandlers
Methods inherited from class org.springframework.web.portlet.handler.AbstractHandlerMapping
adaptInterceptor, extendInterceptors, getAdaptedInterceptors, getDefaultHandler, getHandler, getHandlerExecutionChain, getOrder, initInterceptors, setApplyWebRequestInterceptorsToRenderPhaseOnly, setDefaultHandler, setInterceptors, setOrder
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, initApplicationContext, isContextRequired, requiredContextClass, setApplicationContext
Constructor Detail
DefaultAnnotationHandlerMapping
public DefaultAnnotationHandlerMapping()
Method Detail
initApplicationContext
public void initApplicationContext() throws BeansException
Calls theregisterHandlersmethod in addition to the superclass's initialization.- Overrides:
initApplicationContextin classAbstractHandlerMapping- Throws:
ApplicationContextException- in case of initialization errorsBeansException- if thrown by ApplicationContext methods- See Also:
detectHandlers()
detectHandlers
protected void detectHandlers() throws BeansException
Register all handlers specified in the Portlet mode map for the corresponding modes.- Throws:
BeansException- if the handler couldn't be registered
detectHandlerMethods
protected boolean detectHandlerMethods(Class<?> handlerType, String beanName, RequestMapping typeMapping)
Derive portlet mode mappings from the handler's method-level mappings.- Parameters:
handlerType- the handler type to introspectbeanName- the name of the bean introspectedtypeMapping- the type level mapping (if any)- Returns:
trueif at least 1 handler method has been registered;falseotherwise
getLookupKey
protected PortletMode getLookupKey(PortletRequest request) throws Exception
Uses the current PortletMode as lookup key.- Specified by:
getLookupKeyin classAbstractMapBasedHandlerMapping<PortletMode>- Parameters:
request- current portlet request- Returns:
- the lookup key (never
null) - Throws:
Exception- if key computation failed