Весной 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