Весна 5

Весной 2017 года вышел Spring 5. Spring 5 принес массовое обновление в фреймворк Spring. Spring 4 был выпущен в 2013 году, поэтому все ожидали крупного обновления фреймворка. Я очень рад видеть новые возможности в фреймворке Spring.

Особенности Spring 5

Особенности Spring 5 можно широко разделить на следующие категории:

  • Поддержка базовой версии Java
  • Улучшения в ядре API
  • Улучшения в Spring Web MVC
  • Spring WebFlux
  • Функциональное программирование с поддержкой Kotlin
  • Улучшения в тестировании
  • Поддержка устаревших элементов и удаление пакетов

Поддержка базовой версии Java

  • Spring 5 работает на Java 8, поэтому код Spring может использовать лямбда-выражения для улучшения читаемости кода.
  • Spring 5 также поддерживает Java 9, что позволяет создавать приложения на модульной архитектуре.
  • Spring 5 поддерживает Java EE 7 и также совместим с Java EE 8. Таким образом, мы можем использовать Servlet 4.0, Bean Validation 2.0, JPA 2.2 в наших приложениях. Мы также можем использовать их более старые версии, т.е. Servlet 3.1, Bean Validation 1.1, JPA 2.1.
  • Предпочтительные версии серверов для приложений Spring 5 – Tomcat 8.5+, Jetty 9.4+ и WildFly 10+.

I really like that spring 5 is trying to catch up to the latest version of different technologies.

Улучшения в ядре API

  • Объявление API без возможности значения null на уровне пакета. Аргументы, поля и возвращаемые значения с возможностью значения null явно аннотированы аннотацией @Nullable.
  • Операции с файлами выполняются через потоки NIO 2, т.е. без использования FileInput/Output Stream. Это отличное улучшение и повышение производительности для приложений, работающих с файлами.
  • Spring Framework 5.0 поставляется с собственным мостом для Commons Logging; spring-jcl вместо стандартного Commons Logging.
  • Поддержка предоставления информации о компонентах Spring через индексный файл “META-INF/spring.components” вместо сканирования classpath. Это значительно улучшит время запуска, особенно если у вас большой проект Spring с множеством компонентов. Это также удобно для разработчиков, потому что мы можем непосредственно просматривать указанные файлы для определения точки входа в приложение, вместо поиска по всему classpath.

Улучшения в Spring Web MVC

Модуль Spring MVC претерпел крупные изменения в использовании последних технологий Java EE. Некоторые из основных улучшений включают:

  • Полная поддержка сигнатуры Servlet 3.1 в реализациях Filter, предоставляемых Spring.
  • Поддержка аргумента Servlet 4.0 PushBuilder в методах контроллера Spring MVC.
  • MaxUploadSizeExceededException для разбора многократных частей Servlet 3.0 на общих серверах.
  • Единая поддержка общих типов медиа через делегата MediaTypeFactory.
  • Привязка данных к неизменяемым объектам с использованием Kotlin, Lombok, @ConstructorProperties.
  • Поддержка JSON Binding API в качестве альтернативы Jackson и GSON.
  • Поддержка Reactor 3.1 Flux и Mono, а также RxJava 1.3 и 2.1 в качестве возвращаемых значений из методов контроллера Spring MVC.
  • Поддержка ResponseStatusException как программной альтернативы @ResponseStatus.

Spring WebFlux

Spring WebFlux – новый модуль, альтернатива модулю spring-webmvc, построенный на реактивном фреймворке. Этот модуль используется для создания полностью асинхронных и неблокирующих приложений, построенных на модели выполнения событийного цикла.

  • Реактивная инфраструктура в spring-core, такая как Encoder и Decoder для кодирования и декодирования потоков объектов.
  • @Controller стиль, основанный на аннотациях, модель программирования, аналогичная Spring MVC, но поддерживаемая в WebFlux, работающая на реактивном стеке.
  • Новый WebClient с функциональным и реактивным API для HTTP вызовов, сравнимый с RestTemplate, но через свободное API, и также выдающийся в неблокирующих и потоковых сценариях на основе инфраструктуры WebFlux.

Функциональное программирование с поддержкой Kotlin

Spring 5 также поддерживает программирование на Kotlin. Это огромный шаг в направлении поддержки функционального программирования, так же как и Java также движется в сторону функционального программирования.

  • Поддержка Null-Safe API
  • Поддержка неизменяемых классов Kotlin с необязательными параметрами и значениями по умолчанию.
  • Использование параметров типа Kotlin с ключевым словом reified для избежания явного указания класса для сериализации/десериализации в различных API, таких как RestTemplate или WebFlux API.
  • Поддержка Kotlin для автоматической провязки конструктора с опциональными параметрами.
  • Поддержка Kotlin для безопасности от null-значений с использованием аннотаций @Autowired/@Inject и @RequestParam/@RequestHeader/и т. д.

Улучшения в тестировании

  • Поддержка JUnit 5
  • Поддержка параллельного выполнения тестов в Spring TestContext Framework

Устаревшая поддержка и удаленные пакеты

  • Удалены пакеты beans.factory.access, jdbc.support.nativejdbc, mock.staticmock из модуля spring-aspects.
  • Удалены пакеты web.view.tiles2 и orm.hibernate3/hibernate4. Это означает, что если вы планируете использовать Spring 5, вам также придется использовать Hibernate 5.
  • Была прекращена поддержка старых технологий Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava. Если вы используете какую-либо из них, то либо переходите на другие технологии, либо оставайтесь с Spring 4.

Вот и все для быстрого обзора функций Spring 5. Ссылка: Spring GitHub Doc

Source:
https://www.digitalocean.com/community/tutorials/spring-5