Рубрики
Без рубрики

Видеть как Java-фреймворки, такие как Spring, работают с вашим кодом

Весна + Ваш Код = ❤️ Большую часть времени! Единственная критика, которая придерживается рамок Spring (и… С тегами java, отладка, веб-разработчик.

Весна + Ваш Код = ❤️ Большую часть времени!

Единственная критика, которая относится к фреймворку 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”