Соглашение по конфигурации с Spring MVC с использованием ControllerClassNameHandlerMapping? - PullRequest
3 голосов
/ 19 марта 2009

Следуя указаниям Spring Source и книге Spring in Action, я пытаюсь настроить Spring MVC таким образом, чтобы свести к минимуму конфигурацию xml. Однако в соответствии с Spring Source это то, как вы настраиваете ControllerClassNameHandlerMap

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="viewShoppingCart" class="x.y.z.ViewShoppingCartController">
    <!-- inject dependencies as required... -->
</bean>

Это кажется мне совершенно бесполезным, поскольку на самом деле проще использовать обработчики, чтобы просто устанавливать бины вручную, так как это примерно столько же XML.

Теперь в книге Spring in Action звучит так, будто все, что вам нужно, - это первая строка этого блока кода, в которой будет использоваться ControllerClassNameHandlerMapping, что сделает ее гораздо более полезной. Однако я пока не смог заставить это работать.

Может ли кто-нибудь с опытом Spring помочь мне?

Ответы [ 2 ]

8 голосов
/ 19 марта 2009

Здесь на самом деле происходит две разные вещи:

  1. отображение между URL-адресами и контроллерами
  2. определение контроллеров как бобов 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>
0 голосов
/ 25 августа 2009

Я не думаю, что использование ControllerClassNameHandlerMapping является хорошей инженерной практикой, поскольку она действительно мешает вам выполнять работу по рефакторингу Java-класса Controller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...