Spring MVC从2.5到3.0

时间:2011-01-31 19:00:51

标签: spring spring-mvc

我们正在将我们的Web应用程序从Spring 2.5迁移到Spring 3.0.5。看起来所有的Controller类(org.springframework.web.servlet.mvc包中的类:BaseCommandController,AbstractCommandController,SimpleFormController等)都已被弃用。我们在应用程序中大量使用了这些类。这些类已被@Controller注释替代。

我有一些关于Spring 3.0.x控制器配置的问题......

  1. 我们使用以下XML在Spring 2.5中创建一个Controller bean。如果< context:component-scan>而是用来创建Controller bean,然后如何连接依赖项?如果可能的话,我想避免自动接线。
  2. 
    <bean id="photosetViewController" class="com.xyz.web.PhotosetViewController"
        p:photosetManager-ref="photosetManager"
        p:photoManager-ref="photoManager" />
    
    1. 我们创建了3个拦截器。我们使用SimpleUrlHandlerMapping将这些拦截器映射到不同的请求URL,并将URL映射到控制器。我们如何在Spring 3.0.x中实现相同的目标?
    2. 
      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          <property name="alwaysUseFullPath" value="true" />      
             <property name="interceptors">
                 <list>
                     <ref bean="httpRedirectInterceptor"/>
                     <ref bean="loginInterceptor"/>
                 </list>
             </property>      
              <property name="mappings">
                  <value>             
                      /abc.html=abcLookupController
                      /photoupload.html=photoUploadController
                </value>
              </property>
      </bean>
      
      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          <property name="alwaysUseFullPath" value="true" />      
             <property name="interceptors">
                 <list>
                     <ref bean="httpRedirectInterceptor"/>
                     <ref bean="loginInterceptor"/>
                     <ref bean="userMenuInterceptor" />
                 </list>
             </property>      
              <property name="mappings">
                  <value>
                      /index.html=homepageController
                      /success.html=simpleController
                  </value>
              </property>
      </bean>
      
      1. 在SimpleFormControllers的情况下,我们使用了不同的方法,如initBinder,referenceData,formBackingObject。我们还使用了命令对象和验证类。我们如何在Spring 3.0.x中实现相同的目标?
      2. 
        <bean id="photosetAddController" class="com.xyz.web.PhotosetAddController"
            p:photosetManager-ref="photosetManager"
            p:photosetTypeManager-ref="photosetTypeManager"
            p:stateManager-ref="stateManager" >
            <property name="validator">
            <bean class="com.xyz.form.PhotosetAddValidator" />
            </property>
            <property name="formView" value="photosetadd" />
            <property name="successView" value="redirect:/photoset" /> 
        </bean>
        

        非常感谢任何指针。

1 个答案:

答案 0 :(得分:2)

正如斯卡弗曼所指出的那样 - 您的代码无需任何修改即可正常工作。我将简要回答你的问题:

  1. 您可以使用@Resource(name="beanName")进行基于名称的注射。但自动装配也是一个不错的选择。 @Autowired@javax.inject.Inject@Qualifier("name")javax.inject。请注意,您可以使用@InitBinder来区分具有相同接口/基类的bean。您甚至可以使用{{1}}限定符(在文档中阅读所有这些内容)

  2. 拦截器映射可以保持不变

  3. 有{{1}},表示initBinder方法。我不能告诉对方。