Spring Boot 4. Новые модули. Зачем?
Краткое резюме
В статье объясняется, что Spring Boot включает в себя больше функций, чем просто автоконфигурация. Из-за наличия большого количества автоконфигураций в Class Path возникали проблемы с производительностью, поэтому процесс нуждался в оптимизации.
Статья предназначена для разъяснения концепции «модуляризации» в Spring Boot, её происхождения и причин появления.
Spring Boot часто ассоциируется исключительно с автоконфигурацией, однако его функциональность гораздо шире. Помимо автоконфигурации, он включает в себя такие компоненты, как Spring Boot Actuator, Spring Boot DevTools, Spring Boot Tools и другие.
Когда на собеседовании спрашивают о различиях между Spring Boot и Spring Framework, первое, что приходит в голову многим, — это автоконфигурация.
До появления Spring Boot разработчикам приходилось вручную настраивать взаимодействие с базой данных, используя @Configuration и @Bean. С внедрением Spring Boot процесс значительно упростился: теперь достаточно указать параметры подключения в конфигурационном файле, а Spring Boot автоматически создаст необходимый DataSource.
Однако у такой универсальности есть обратная сторона. В Spring Boot долгое время существовал крупный модуль spring-boot-autoconfigure, который содержал автоконфигурации для всех поддерживаемых технологий — от Apache Cassandra до Apache Pulsar.
При использовании Spring Boot разработчик подключал spring-boot-starter-data-jdbc и вместе с ним транзитивно получал spring-boot-autoconfigure. Это означало, что в проект загружались автоконфигурации для всех технологий, поддерживаемых Spring Boot, даже если использовались лишь некоторые из них.
Дизайн предполагал, что в процессе выполнения программы будет определено, какие автоконфигурации действительно необходимы. Благодаря аннотациям типа @ConditionalOnClass и инструментам вроде ASM и SimpleAnnotationMetadata, Spring Boot мог определить, какие автоконфигурации следует загрузить, не подгружая при этом классы, не относящиеся к проекту.
Тем не менее наличие большого количества автоконфигураций в Class Path могло влиять на производительность и оптимизировать этот процесс было необходимо.