Здесь на самом деле происходит две разные вещи:
- отображение между URL-адресами и контроллерами
- определение контроллеров как бобов Spring
Для # 1, если вы определили ControllerClassNameHandlerMapping, как вы сделали, это заботится о отображении URL-адреса в контроллер. Например, http://example.com/context/home -> HomeController
Для # 2 вы можете определить bean-компоненты контроллера так, как вы это сделали. Или вы можете пойти по пути использования аннотаций в стиле Spring 2.5 для @Controllers и автоматического подключения, что устраняет необходимость в определениях bean-компонентов XML. Или нет, выбор за вами.
Чего вы избегаете, используя ControllerClassNameHandlerMapping, так это явной привязкой всех ваших потенциальных URL-адресов к контроллерам. Мы успешно использовали это.
Еще одна вещь, которую вы можете использовать, - DefaultRequestToViewNameTranslator:
<!-- Generates view names based on the request url (e.g. "/home.htm" => "home", "/user/list.htm" => "user/list", etc.) -->
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>
Мы также используем UrlBasedViewResolver:
<!-- Maps view names to tiles view definitions files. E.g., "home" => "home", etc. -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>