Весна + Ваш Код = ❤️ Большую часть времени!
Единственная критика, которая относится к фреймворку Spring (и другим крупным веб-фреймворкам, если честно), заключается в том, что Spring делает для вас так много, что может быть трудно понять, что происходит на самом деле. Иногда мы можем просто следовать документам и учебникам и наблюдать, как происходит волшебство. Но иногда нам действительно нужно понять, как на самом деле работает Spring и связанные с ним пакеты. И что еще более важно, как они работают с нашим кодом .
Вы уже знакомы с использованием отладчиков – и Java имеет отличный отладчик по сравнению с некоторыми другими языками. Когда вы используете отладчик, вы используете “вывернутый наизнанку” подход к устранению неполадок. Вы выбираете точку в своем коде, с которой хотите начать, а затем можете исследовать ее снаружи. Но хотя таким образом вы можете получить много подробной информации, трудно понять, что происходит в целом в кодовой базе.
Чтобы построить такое понимание на высоком уровне, вам нужно больше подхода “снаружи-внутри”. Вот кулинарная книга, которой вы можете следовать, чтобы увидеть, как ваш код работает с Spring и другими библиотеками Java, начиная с самого широкого охвата и заканчивая подробностями. Для этого я покажу вам, как использовать инструмент с открытым исходным кодом под названием Карта приложений . Карта приложений записывает поведение вашего кода во время выполнения и сохраняет его в виде файлов JSON, называемых Картами приложений. Затем вы можете открыть файлы карт приложений в редакторе кода ( VS Code или IntelliJ ) и просматривать и искать карты зависимостей и диаграммы трассировки выполнения.
Вот как вы это используете:
1. Установите приложение map-java агент
Следуйте краткому руководству по началу работы с VSCode или IntelliJ . Вот краткий контрольный список:
- Добавьте Java-агент сопоставления приложений в конфигурацию Maven или Gradle или просто загрузите файл JAR с https://github.com/applandinc/appmap-java/releases
- Создать
приложение map.ymlи настройте имя своего проекта и имена основных пакетов.
2. Добавьте дополнительные имена пакетов, такие как org.springframework.веб, в приложение map.yml
Вот пример приложение map.yml , которое я использую со своей вилкой Весенней клиники для домашних животных.
3. Запишите карту выполнения кода приложения
У вас есть несколько вариантов записи кода:
Вариант 1: Тестовый случай(ы)
Если у вас есть тесты JUnit или TestNG, которые охватывают ваше приложение, запустите тесты с включенной интеграцией карты приложений Gradle или Maven.
Вариант 2: Запись действий пользователя и запросов API
Если у вас нет теста, который делает то, что вам нужно, вы можете использовать свое приложение и получить карту приложения со всеми выполняемыми вами действиями. Это называется “удаленная запись”, и для ее использования вы запускаете свой веб-сервер с флагом -javaagent:appmap.jar . Если ваше приложение является сервером API, запустите сервер и отправьте запросы API. В любом случае, вы получите файл app map.json при выходе с сервера.
Вариант 3. Запишите весь запуск сервера, включая запуск и завершение работы
Java-агент App Map поддерживает системное свойство app map.запись.авто . Если вы установите для этого свойства значение true, серверный процесс записывается от начала до конца, а результаты записываются в файл с меткой времени appmap.json при завершении процесса.
4. Просмотр диаграмм
Расширение карты приложений для VS Code и IntelliJ позволяет открывать любые *.app map.json и исследуйте его визуально. Чтобы открыть Apple Maps в редакторе кода, откройте “Окно инструментов” Карты приложений (IntelliJ) или боковую панель Apple Maps (VSCode).
Нажмите на карту приложения, чтобы просмотреть карту зависимостей в окне редактора кода. Оттуда вы можете выполнять поиск, просматривать и детализировать представление трассировки.
Демонстрация – Клиника для домашних животных +org.springframework.web
Как я уже указывал выше, Карта приложений – это гибкий инструмент, и есть несколько способов его использования. Давайте начнем с довольно простого, но довольно полезного и наглядного примера.
Контроллер пружины представляет собой довольно сложную смесь методов и аннотаций – даже в простой клинике для домашних животных “Контроллер владельца” есть по крайней мере 5 различных аннотаций, используемых несколькими различными способами. Подобный код является мощным, но в отличие от “обычного” процедурного или функционального кода, в коде нет информации о том, как используются функции, как они сочетаются друг с другом или какие из них используются в конкретном случае использования.
@Controller
class OwnerController {
private static final String VIEWS_OWNER_CREATE_OR_UPDATE_FORM = "owners/createOrUpdateOwnerForm";
private final OwnerRepository owners;
private VisitRepository visits;
public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
this.owners = clinicService;
this.visits = visits;
}
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
dataBinder.setDisallowedFields("id");
}
@GetMapping("/owners/new")
public String initCreationForm(Map model) {
Owner owner = new Owner();
model.put("owner", owner);
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
@PostMapping("/owners/new")
public String processCreationForm(@Valid Owner owner, BindingResult result) {
if (result.hasErrors()) {
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
else {
this.owners.save(owner);
return "redirect:/owners/" + owner.getId();
}
}
@GetMapping("/owners/find")
public String initFindForm(Map model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
org.springframework.web – это пакет, который организует эти фрагменты кода Java на основе их аннотаций.
Чтобы получить карту того, как работает запрос владельца, я запущу клинику для домашних животных с включенной удаленной записью, а затем использую расширение карты приложения для IntelliJ для создания записи веб-запроса. Это немного легче смотреть, чем объяснять, поэтому ознакомьтесь с видео выше, чтобы ознакомиться со всем этим.
Чтобы воссоздать это самостоятельно, загляните в ветвь приложения map-e2e https://github.com/land-of-apps/spring-petclinic
Чтобы записывать и просматривать собственные карты кода во время выполнения непосредственно в редакторе кода, загрузите бесплатный плагин карт приложений для JetBrains здесь: https://plugins.jetbrains.com/plugin/16701-appmap
Оригинал: “https://dev.to/appland/see-how-java-frameworks-like-spring-work-with-your-code-1acl”