Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Model
является интерфейсом, а ModelMap
является классом.
ModelAndView
- это просто контейнер для объекта ModelMap
и вида. Он позволяет контроллеру возвращать оба как одно значение.
Модель: это интерфейс, который содержит четыре метода addAttribute и один метод merAttribute.
ModelMap: реализует интерфейс карты. Он также содержит метод Map.
ModelAndView: как объясняет Барт, он позволяет контроллеру возвращать оба как одно значение.
Различия между Model, ModelMap и ModelAndView
Модель: это интерфейс.
Пример:
@RequestMapping(method = RequestMethod.GET)
public String printHello(Model model) {
model.addAttribute("message", "Hello World!!");
return "hello";
}
ModelMap: реализация карты для использования при создании данных модели для использования с UI tools.Поддерживает прикованные вызовы и генерирует имена атрибутов модели.
Пример:
@RequestMapping("/helloworld")
public String hello(ModelMap map) {
String helloWorldMessage = "Hello world!";
String welcomeMessage = "Welcome!";
map.addAttribute("helloMessage", helloWorldMessage);
map.addAttribute("welcomeMessage", welcomeMessage);
return "hello";
}
ModelAndView: этот класс просто содержит оба, чтобы дать возможность контроллеру вернуть обе модели и просмотр в одном возвратном значении.
Пример:
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "Hello World!";
return new ModelAndView("welcome", "message", message);
}