2010-06-08 24 views
17

C'è qualche differenza traSpring MVC, in avanti

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

e

@Controller 
public class Controller1 { 

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

risposta

16

Sono simili, ma non proprio la stessa cosa.

Il secondo approccio creerà una nuova richiesta interna da inoltrare al secondo controller, mentre il primo riutilizzerà lo stesso oggetto di richiesta.

Se ciò che conta dipende o meno da ciò che ciascuno dei controllori fa alla richiesta.

Ho trovato che concatenare i controller insieme usando le chiamate al metodo diretto è uno degli aspetti più interessanti dei controller con annotazioni Spring, può creare un flusso molto più naturale di quello di mandare avanti le richieste inoltrate.

Come sempre, il tuo chilometraggio può variare.

22

Creando i controller da soli, impedirai a Spring di iniettare qualsiasi dipendenza in essi. Ciò potrebbe causare il malfunzionamento dei controller creati dall'utente.

Se davvero necessità di controllori della catena come questo, vorrei chiedere al contesto di applicazione della molla per un'istanza del controller che si desidera invece di creare uno con l'operatore new.

+7

Ancora meglio, è possibile @Autowired l'altro controller. –