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";
    }
}
17
задан user12384512 8 June 2010 в 20:22
поделиться

2 ответа

Они похожи, но не совсем одинаковы.

Второй подход создаст новый внутренний запрос, который будет перенаправлен на второй контроллер, тогда как первый будет повторно использовать тот же объект запроса.

То, имеет это значение или нет, зависит от того, что каждый из контроллеров делает с запросом.

Я обнаружил, что объединение контроллеров в цепочку с использованием прямых вызовов методов - один из наиболее привлекательных аспектов аннотированных контроллеров Spring, он может обеспечить гораздо более естественный поток, чем отбрасывание перенаправленных запросов.

Как всегда, ваш пробег может отличаться.

16
ответ дан 30 November 2019 в 11:37
поделиться

Создавая контроллеры самостоятельно, вы предотвратите внедрение Spring в них каких-либо зависимостей. Это может привести к некорректной работе созданных вами контроллеров.

Если вам действительно нужно объединить такие контроллеры в цепочку, я бы попросил контекст приложения Spring предоставить экземпляр контроллера, который вам нужен, вместо того, чтобы создавать его с помощью оператора new .

22
ответ дан 30 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: