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";
}
}
Ответы
Ответ 1
Они похожи, но не совсем то же самое.
Второй подход создаст новый внутренний запрос, который будет перенаправлен второму контроллеру, тогда как первый повторит использование одного и того же объекта запроса.
Независимо от того, зависит ли это от того, что каждый из контроллеров делает с запросом.
Я обнаружил, что контроллеры цепочки вместе, используя прямые вызовы методов, являются одним из наиболее привлекательных аспектов аннотированных контроллеров Spring, он может обеспечить гораздо более естественный поток, чем перемещение пересылаемых запросов.
Как всегда, ваш пробег может меняться.
Ответ 2
Создав контроллеры самостоятельно, вы предотвратите использование Spring любых зависимостей в них. Это может привести к неправильной работе ваших самонастраиваемых контроллеров.
Если вам действительно нужно подключить контроллеры, подобные этому, я бы попросил контекст приложения Spring для экземпляра контроллера, который вы хотите, вместо создания с помощью оператора new
.