Что принёс Spring Framework 5

Историческая версия

Spring 5 важен для поддержки приложений поколения Spring Boot 2. Для новых систем обычно рассматривают поколение Spring 6 / Boot 3+, где baseline и пространство jakarta.* другие.

Основные изменения пятой ветки

ОбластьИзменение
Java baselineJava 8 и активное использование default methods, lambdas, Optional
ReactiveReactor 3 и контракт Reactive Streams
WebSpring WebFlux рядом с Servlet-based Spring MVC
endpointsannotation model и functional routing в WebFlux
Kotlinfirst-class улучшения API и null-safety metadata
testingинтеграция TestContext с JUnit Jupiter
corenullable/non-null annotations и обновлённые reflection/cache internals

WebFlux не является «новой версией MVC». Это отдельный неблокирующий web stack. В одном приложении выбор определяется всей цепочкой: блокирующий JDBC-вызов внутри reactive handler не становится неблокирующим.

@Bean
RouterFunction<ServerResponse> routes(OrderHandler handler) {
    return RouterFunctions.route()
            .GET("/orders/{id}", handler::find)
            .build();
}

Что важно при чтении legacy-кода

  • Spring 5 использует Java EE API пространства javax.*; переход на Spring 6 требует Jakarta jakarta.*;
  • WebSecurityConfigurerAdapter относится к старому стилю Spring Security и позже был заменён bean-based конфигурацией;
  • WebMvcConfigurerAdapter потерял смысл после default methods — реализуют WebMvcConfigurer напрямую;
  • Spring Framework и Spring Boot имеют разные номера версий;
  • Reactor не делает blocking dependency reactive.

Миграционная проверка

  1. Зафиксировать версии JDK, Spring Framework, Boot, Security и persistence API.
  2. Найти javax.*, удалённые adapters и устаревшие конфигурации.
  3. Обновлять совместимым набором, а не один случайный jar.
  4. Запустить integration tests для proxy, transactions, serialization и security.

На собеседовании

Главное web-нововведение Spring 5? WebFlux и reactive foundation на Reactor.

Заменил ли WebFlux MVC? Нет, оба стека существуют для разных моделей нагрузки.

Почему нельзя просто сменить Spring 5 на 6? Меняются baseline JDK, Jakarta namespace и совместимые поколения библиотек.

Станет ли JDBC неблокирующим в Mono? Нет.

Связано: Spring Reactor, Реактивное программирование Java, MVC, Spring Boot.