2010-06-08 17 views
17

¿Hay alguna diferencia entreSpring MVC, hacia adelante

public class Controller1 extends AbstractController { 
    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
     return new AnotherController().handleRequest(request, response); 
    } 
} 

y

@Controller 
public class Controller1 { 

    @RequestMapping ... 
    public String handleRequest() { 
     return "forward:/path_to_my_another_controller"; 
    } 
} 

Respuesta

16

Son similares, pero no exactamente lo mismo.

El segundo enfoque creará una nueva solicitud interna que se reenviará al segundo controlador, mientras que la primera reutilizará el mismo objeto de solicitud.

Si eso importa o no depende de lo que cada uno de los controladores haga a la solicitud.

He encontrado que encadenar controladores juntos mediante llamadas directas a métodos es uno de los aspectos más atractivos de los controladores con anotaciones de Spring, ya que puede generar un flujo mucho más natural que las solicitudes enviadas por ahí.

Como siempre, su kilometraje puede variar.

22

Al crear los controladores usted mismo, evitará que Spring les inyecte dependencias. Esto puede hacer que los controladores creados por ustedes mismos no funcionen correctamente.

Si realmente necesidad de controladores de cadena como esta, pediría el contexto de aplicación de primavera para una instancia del controlador que desea en lugar de crear uno con el operador new.

+7

Mejor aún, puede @Autowired el otro controlador. –

Cuestiones relacionadas