3

Den Anweisungen von Spring Source und dem Buch Spring in Action folgend, versuche ich, Spring MVC so einzurichten, dass die XML-Konfiguration minimiert wird. Jedoch nach Frühling Quelle dies ist, wie Sie die ControllerClassNameHandlerMap einrichtenKonvention über Konfiguration mit Spring MVC mit ControllerClassNameHandlerMapping?

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

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

Was mir auffällt, als völlig nutzlos, da es tatsächlich einfacher ist die Handler zu verwenden, um nur die Bohnen von Hand eingestellt, wie es etwa die gleiche ist Menge an XML.

Jetzt das Buch Frühling in Aktion macht es klingt wie alles, was Sie brauchen, ist die erste Zeile aus diesem Code-Block, um die ControllerClassNameHandlerMapping verwenden, die es viel nützlicher machen würde. Allerdings konnte ich dies noch nicht zur Arbeit bringen.

Kann mir jemand mit Spring-Erfahrung helfen?

Antwort

8

Es gibt tatsächlich zwei verschiedene Dinge, die sich hier:

  1. die Zuordnung zwischen URLs und Controller
  2. die Definition von Controllern wie Frühling Bohnen

Für # 1, wenn Sie die definieren ControllerClassNameHandlerMapping, wie Sie getan haben, kümmert sich um die Zuordnung von URL zu Controller. Beispiel: http://example.com/context/home -> HomeController

Für # 2 können Sie die Controller-Beans so definieren, wie Sie es getan haben. Oder Sie können den Pfad zur Verwendung der Anmerkungen im Spring-2.5-Stil für @Controllers und die automatische Verdrahtung verwenden, wodurch XML-Bean-Definitionen überflüssig werden. Oder nicht, die Wahl liegt bei Ihnen.

Was Sie vermeiden, indem Sie ControllerClassNameHandlerMapping verwenden, ist die explizite Zuordnung aller potenziellen URLs zu Controllern. Wir haben das erfolgreich genutzt.

Eine andere Sache, die Sie die DefaultRequestToViewNameTranslator verwenden wollen könnte, ist:

<!-- 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

Danke für die Antwort Jeff. Was ich erreichen möchte, ist nur # 1, aber ohne die zusätzliche Bean-Definition ist keine meiner URLs auf meine Controller abgebildet. –

+0

Richtig, das ist wahrscheinlich, weil Spring nichts über Ihre Controller weiß, es sei denn, Sie machen sie zu Frühlingsbohnen. Sie können das mit defs tun, oder indem Sie Anmerkungen verwenden. –

+0

Auch mit der @Controller Annotation funktioniert es nicht, aber ich vermisse etwas von meiner Konfiguration. –

0

Ich glaube nicht, mit ControllerClassNameHandlerMapping eine Praxis gute Technik ist, wie:

<!-- 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"/> 

Wir auch die UrlBasedViewResolver verwenden Es verhindert wirklich, dass Sie Refactoring-Arbeiten an der Controller-Java-Klasse vornehmen.

+0

Ich bevorzuge die Konvention über Konfigurationsansatz, es ist nur eine Frage der Präferenz. Ich stimme nicht zu, dass es Refactoring verhindert, Sie müssen nur Ihre Ansicht und Ihre Controller-Namen synchron mit der Konfigurationsmethode halten, bei der Sie Ihre Ansicht, Ihren Controller und Ihre Konfiguration synchronisieren müssen. –