org.springframework.web.servlet.mvc.support
Class AbstractControllerUrlHandlerMapping

java.lang.Object
  extended by org.springframework.context.support.ApplicationObjectSupport
      extended by org.springframework.web.context.support.WebApplicationObjectSupport
          extended by org.springframework.web.servlet.handler.AbstractHandlerMapping
              extended by org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
                  extended by org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping
                      extended by org.springframework.web.servlet.mvc.support.AbstractControllerUrlHandlerMapping
All Implemented Interfaces:
Aware, ApplicationContextAware, Ordered, ServletContextAware, HandlerMapping
Direct Known Subclasses:
ControllerBeanNameHandlerMapping, ControllerClassNameHandlerMapping

public abstract class AbstractControllerUrlHandlerMapping
extends AbstractDetectingUrlHandlerMapping

Base class for HandlerMapping implementations that derive URL paths according to conventions for specific controller types.

Since:
2.5.3
Author:
Juergen Hoeller
See Also:
ControllerClassNameHandlerMapping, ControllerBeanNameHandlerMapping

Field Summary
 
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
 
Fields inherited from interface org.springframework.web.servlet.HandlerMapping
BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
AbstractControllerUrlHandlerMapping()
           
 
Method Summary
protected abstract  String[] buildUrlsForHandler(String beanName, Class beanClass)
          Abstract template method to be implemented by subclasses.
protected  String[] determineUrlsForHandler(String beanName)
          This implementation delegates to buildUrlsForHandler(java.lang.String, java.lang.Class), provided that isEligibleForMapping(java.lang.String, java.lang.Class) returns true.
protected  boolean isControllerType(Class beanClass)
          Determine whether the given bean class indicates a controller type that is supported by this mapping strategy.
protected  boolean isEligibleForMapping(String beanName, Class beanClass)
          Determine whether the specified controller is excluded from this mapping.
protected  boolean isMultiActionControllerType(Class beanClass)
          Determine whether the given bean class indicates a controller type that dispatches to multiple action methods.
 void setExcludedClasses(Class[] excludedClasses)
          Specify controller classes that should be excluded from this mapping.
 void setExcludedPackages(String[] excludedPackages)
          Specify Java packages that should be excluded from this mapping.
 void setIncludeAnnotatedControllers(boolean includeAnnotatedControllers)
          Set whether to activate or deactivate detection of annotated controllers.
 
Methods inherited from class org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping
detectHandlers, initApplicationContext, setDetectHandlersInAncestorContexts
 
Methods inherited from class org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
buildPathExposingHandler, exposePathWithinMapping, exposeUriTemplateVariables, getHandlerInternal, getHandlerMap, getRootHandler, lookupHandler, registerHandler, registerHandler, setLazyInitHandlers, setRootHandler, supportsTypeLevelMappings, validateHandler
 
Methods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping
adaptInterceptor, detectMappedInterceptors, extendInterceptors, getAdaptedInterceptors, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getUrlPathHelper, initInterceptors, setAlwaysUseFullPath, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setUrlDecode, setUrlPathHelper
 
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
 
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractControllerUrlHandlerMapping

public AbstractControllerUrlHandlerMapping()
Method Detail

setIncludeAnnotatedControllers

public void setIncludeAnnotatedControllers(boolean includeAnnotatedControllers)
Set whether to activate or deactivate detection of annotated controllers.


setExcludedPackages

public void setExcludedPackages(String[] excludedPackages)
Specify Java packages that should be excluded from this mapping. Any classes in such a package (or any of its subpackages) will be ignored by this HandlerMapping.

Default is to exclude the entire "org.springframework.web.servlet.mvc" package, including its subpackages, since none of Spring's out-of-the-box Controller implementations is a reasonable candidate for this mapping strategy. Such controllers are typically handled by a separate HandlerMapping, e.g. a BeanNameUrlHandlerMapping, alongside this ControllerClassNameHandlerMapping for application controllers.


setExcludedClasses

public void setExcludedClasses(Class[] excludedClasses)
Specify controller classes that should be excluded from this mapping. Any such classes will simply be ignored by this HandlerMapping.


determineUrlsForHandler

protected String[] determineUrlsForHandler(String beanName)
This implementation delegates to buildUrlsForHandler(java.lang.String, java.lang.Class), provided that isEligibleForMapping(java.lang.String, java.lang.Class) returns true.

Specified by:
determineUrlsForHandler in class AbstractDetectingUrlHandlerMapping
Parameters:
beanName - the name of the candidate bean
Returns:
the URLs determined for the bean, or null or an empty array if none

isEligibleForMapping

protected boolean isEligibleForMapping(String beanName,
                                       Class beanClass)
Determine whether the specified controller is excluded from this mapping.

Parameters:
beanName - the name of the controller bean
beanClass - the concrete class of the controller bean
Returns:
whether the specified class is excluded
See Also:
setExcludedPackages(java.lang.String[]), setExcludedClasses(java.lang.Class[])

isControllerType

protected boolean isControllerType(Class beanClass)
Determine whether the given bean class indicates a controller type that is supported by this mapping strategy.

Parameters:
beanClass - the class to introspect

isMultiActionControllerType

protected boolean isMultiActionControllerType(Class beanClass)
Determine whether the given bean class indicates a controller type that dispatches to multiple action methods.

Parameters:
beanClass - the class to introspect

buildUrlsForHandler

protected abstract String[] buildUrlsForHandler(String beanName,
                                                Class beanClass)
Abstract template method to be implemented by subclasses.

Parameters:
beanName - the name of the bean
beanClass - the type of the bean
Returns:
the URLs determined for the bean