2010-06-08 2 views
17

Gibt es einen Unterschied zwischenSpring MVC, vorwärts

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

und

@Controller 
public class Controller1 { 

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

Antwort

16

Sie sind ähnlich, aber nicht ganz dasselbe.

Der zweite Ansatz erstellt eine neue interne Anforderung zum Weiterleiten an den zweiten Controller, während der erste das gleiche Anforderungsobjekt erneut verwendet.

Ob das zählt, hängt davon ab, was jeder der Controller mit der Anfrage macht.

Ich habe festgestellt, dass die Verkettung Controller zusammen mit direkten Methodenaufrufen ist einer der ansprechenden Aspekte der Spring kommentierte Controller, kann es für einen viel natürlicheren Fluss als chucking weitergeleitet Anforderungen um.

Wie immer kann Ihre Laufleistung variieren.

22

Wenn Sie selbst Controller erstellen, verhindern Sie, dass Spring Abhängigkeiten in sie einfügt. Dies kann dazu führen, dass Ihre selbst erstellten Controller nicht korrekt funktionieren.

Wenn Sie wirklich Notwendigkeit, Ketten Controllern wie diese, würde ich die Spring-Anwendungskontext für eine Instanz des Controllers Sie stattdessen eine der Erstellung mit dem new Betreiber wollen fragen.

+7

Besser noch, Sie können den anderen Controller @Autowired. –