Spring MVC,转发

两者之间有什么区别吗?

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

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

它们相似,但不完全相同。

第二种方法将创建一个新的内部请求转发到第二个控制器,而第一个将重新使用相同的请求对象。

这是否重要取决于每个控制器对请求的作用。

我发现使用直接方法调用将控制器链接在一起是Spring注释控制器更具吸引力的方面之一,它可以比转发请求转发请求更自然。

一如既往,您的里程可能会有所不同

通过自己创建控制器,您将阻止Spring向其中注入任何依赖项。 这可能会导致您自行创建的控制器无法正常工作。

如果你真的需要链接这样的控制器,我会向Spring应用程序上下文询问你想要的控制器实例,而不是用new运算符创建一个。