Говоря о трендах, хотелось бы сказать, что в настоящее время развиваются фреймворки, построенные на отказе от использования Reflection API. Dependency injection в Spring, сериализация с помощью Jackson построены на использовании Reflection, что сильно бьет по производительности, но было достаточно удобным решение до недавнего времени. Фреймворк Micronaut полностью построен на отказе от Reflection, и это дает существенный прирост производительности при измерении ряда параметров. Micronaut использует продвинутый компилятор и генерацию байткода, что позволяет создать все бины (управляемые фреймворком объекты) в ходе компиляции.
Пока доля Micronaut очень мала, но он используется в продакшене. Я предполагаю, что в какой-то момент Spring может также внедрить подобный подход.
Продолжает развиваться реактивное программирование, которое является в какой-то степени новой парадигмой в программировании.
Spring развивает свой реактивный фреймворк Spring WebFlux, который поддерживает библиотеку Reactor.
Ряд современных задач не решается традиционными методами, такими как блокирующий Input/Output, HTTP-протокол. Одним из решений данных вопросов является применение подходов реактивного программирования (Reactor, RxJava), использование новых протоколов передачи данных (RSocket). У нас также готовится курс ReactJava как продолжение TopJava на реактивном стеке.
ПО становится большим и сложным. Очень большое приложение сложно поддерживать одной командой, управлять его жизненным циклом: разработка, релиз. Приходиться все заново тестировать, долго ждать выхода новой фичи. Решение - микросервисы, когда над сервисом работает один человек или небольшая команда (есть правило двух пицц - команду можно накормить 2-мя пиццами). Это решает проблемы выше, но не бесплатно - разработка микросервисов, как и реактивного приложения, на порядок сложнее.
Следующий курс, готовый стать самым популярным после TopJava, - Микросервисы.