
Всем привет! ????? Мы — Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся со всем сообществом.
Этот месяц в мире Java выдался насыщенным. В JDK 26 готовят превью Lazy Constants и Structured Concurrency, собираются убрать режим строк только UTF‑16, а стандартный HttpClient получает более гибкую поддержку TLS.
Главное событие — GA‑релизы Spring Framework 7 и Spring Boot 4: модульная автоконфигурация, новый HTTP‑клиент, версионирование REST API, переход на Jackson 3 и множество других улучшений.
Из практики: разбор пагинации в Spring Data JPA, подводные камни MapStruct и заметка о балансе между чтением и написанием кода. Приятного чтения!
Горячие JEPы
JEP 526: Lazy Constants (Second Preview) направлен в JDK 26. JEP представляет API для ленивых констант, которые позволяют инициализировать объекты с неизменяемыми данными по требованию, а не при создании объекта или инициализации класса. Появляется гибкость в выборе времени инициализации, сохраняя при этом преимущества констант для оптимизаций JVM.
Вторая версия превью:
Переименовывается с StableValue на LazyConstant.
Переориентируется на высокоуровневые сценарии использования с удалением низкоуровневых методов.
Упрощается за счет удаления малополезных фабричных методов function и intFunction.
Запрещает использование null в качестве вычисляемого значения для повышения производительности и согласования с неизменяемыми коллекциями и ScopedValue.
JEP 525: Structured Concurrency (Sixth Preview) направлен в JDK 26. Про этот джеп мы уже не раз писали, но напомним, что он позволит упростить параллельное программирование, улучшит обработку ошибок, отмену задач, наблюдаемость и надежность кода. С этим джепом группы связанных задач можно будет рассматривать как единые блоки группы связанных задач, выполняемых в разных потоках. Добавлен в JDK 26 в качестве превью для сбора дополнительной обратной связи и внедрения незначительных улучшений в API.
JEP draft: Deprecate the UTF-16-only String Representation. Начиная с JDK 9 используется так называемый Compact Strings — внутреннее хранение строк в однобайтовой кодировке ISO Latin-1 (для «простых» строк) или в UTF-16 по необходимости, что экономит память. Поддержка старого режима (UTF-16-only), доступного через флаг -XX:-CompactStrings (отключение компактного режима хранения), давно не оптимизируется и даже приводит к багам, поэтому JEP предлагает полностью удалить это в будущих релизах JD.
Главные новости
Quality Outreach Heads-up — JDK 26: HttpClient Supports TLS Named Groups & Signature Schemes. Статья посвящена нововведениям в JDK 26 и рассказывает, что в этой версии Java HttpClient начнет поддерживать TLS Named Groups и Signature Schemes. Это позволяет более гибко настраивать ограничения TLS в Java-приложениях и не использовать для этого клиенты из библиотек.
Интересные видео
ONNX Based Generative AI LLMs in Java with Project Babylon Лекция о том, как с помощью Project Babylon и рефлексии в Java можно трансформировать исходный код в исполняемые модели ИИ и экспортировать их в формате ONNX. Показаны практические шаги от аннотированного Java-метода до запуска модели в ONNX Runtime, включая оптимизации, частичную оценку и работу с тензорами — идеально для Java-разработчиков, интересующихся генеративным ИИ и нативной интеграцией ML.
Symbolic Modeling and Transformation of Java Code #JVMLS Лекция на #JVMLS посвящена символическому моделированию Java-кода с использованием рефлексии — мощному подходу для анализа и трансформации программ в виде метамоделей. Показано, как Java-конструкции (переменные, условия, циклы, шаблоны) представляются в виде дерева операций, что позволяет выполнять статический анализ, оптимизации и интеграцию с ML-моделями. Стоит посмотреть, чтобы понять, как Project Babylon расширяет Java за счет рефлексии на уровне кода и готовит почву для гетерогенных вычислений и ИИ.
Полезные статьи
Performance Improvements in JDK 25 — обзор ключевых улучшений производительности, которые появились в JDK 25. Автор проходит по всем подсистемам JVM (библиотеки, GC, JIT, профилирование, работа с памятью) и перечисляет десятки изменений, которые в совокупности делают платформу быстрее, стабильнее и экономичнее по памяти.
Java Annotated Monthly — November 2025 — подборка новостей, статей и обзоров из экосистемы Java, Kotlin и сопутствующих технологий с практическим уклоном.
Свежие релизы JDK, заметные движения в Spring-мире, статьи по производительности, подборки практических гайдов для разработчиков и полезные разборы инструментов.
Help, My Java Object Vanished (and the GC is Not at Fault) описывает, как разработчик HotSpot JVM в проекте OpenJDK столкнулся с исчезновением Java-объектов при работе над JEP 450 (Compact Object Headers) в Project Liliput. Автор подробно рассказывает о процессе отладки, выявлении и устранении ошибки, связанной с компилятором C2 и обработкой объектных мониторов из-за неправильной битовой маски. Материал рассказывает, чем занимается Project Liliput изнутри и полезен разработчикам, изучающим устройство JVM.
Null-Safe applications with Spring Boot 4. Начиная с Spring Boot 4.0 в большинстве модулей будет null-safe API. Null-safety достигается путем добавления на все API аннотаций @Nullable и @NotNull, что позволит понимать о возможном NullPointerException еще в compile-time.
Modularizing Spring Boot. Spring Boot 4 перерабатывает автоконфигурацию: вместо одного «толстого» spring-boot-autoconfigure появляются более гранулярные модули и соответствующие стартеры. Это сокращает размер зависимостей и class-path, убирает лишние классы в автодополнении IDE и позволяет более точечно подключать конкретные компоненты. Например, WebClient теперь можно подключить не только попутно подключая весь spring-webflux, а используя небольшой spring-boot-webclient.
Multi-Factor Authentication in Spring Security 7. Spring Security 7 добавляет встроенную поддержку мультифакторной аутентификации: разные способы входа оформляются как отдельные «факторы», которые можно гибко требовать для разных эндпоинтов. MFA настраивается глобально через аннотацию или точечно через AuthorizationManagerFactory, поддерживает time‑based- и user‑based-правила и легко расширяется своими AuthenticationProvider, включая passwordless-сценарии.
Spring gRPC Next Steps for 1.0.0 о том, что конфигурацию Spring gRPC планировали перенести в ядро Spring Boot 4.0, но не успели к GA. Из-за этого команда решила выпустить отдельный Spring gRPC 1.0 с поддержкой Boot 4 под тем же groupId org.springframework.grpc. На данный момент миграция будет выглядеть как изменение версии в pom-файле, а уже в Spring Boot 4.1 планируют окончательно слить Spring gRPC со Spring Boot.
IntelliJ IDEA 2025.3 ? Spring 7. Пост о том, как IntelliJ IDEA 2025.3 будет помогать работать с новыми фичами Spring 7:
REST API Versioning.
HTTP Interface Clients.
Dynamic Bean Registration.
Встречаем Spring AI Agents и Spring AI Bench — перевод статьи Introducing Spring AI Agents and Spring AI Bench. Автор рассказывает о двух новых инкубационных проектах для работы с AI, которые недавно вошли в Spring AI Community.
Первый — Spring AI Agents, инструмент предлагает универсальную абстракцию AgentClient, для работы с CLI-агентами, такими как Claude Code, Gemini CLI от Google, Amazon Q Developer и другими.
Второй — Spring AI Bench, набор бенчмарков, позволяющих определить, насколько хорошо агенты справляются с различными задачами.
Ну все! Теперь точно Final объясняет, что такое стратегия Integrity By Default и как с ней связан JEP 500. Дается историческая справка о том, как так вышло, что final на самом деле не совсем final, при чем тут не самая удачная реализация механизма сериализации в Java и какие бенефиты реализация JEP 500 принесет платформе Java.
MapStruct: как безобидный метод портит весь маппинг — перевод заметки MapStruct: When a Helper Method Maps More Than You Asked For. Автор рассказывает о неочевидном поведении MapStruct. Дело в том, что вспомогательный метод, объявленный в мапере, может примениться не только для тех мапингов, где указано его использование через expression. Помимо объяснения проблемы даются три способа ее решения.
Spring Data Ahead of Time Repositories — Part 2. Небольшая статья о том, чего ожидать от AOT-репозиториев в Spring Data. Ключевые моменты:
Генерация кода станет уникальной для каждого модуля Spring Data.
SQL-диалект зафиксируется на этапе сборки приложения.
AOT-репозитории можно будет отключить как все вместе, так и модули по отдельности.
Так как код репозитория будет генерироваться на этапе сборки, то после нее можно ставить точки останова в сгенерированном коде, что облегчит отладку.
Spring будет генерировать файлы метаданных в формате json. В них будет информация о репозиториях, которую можно использовать для генерации документации или в плагинах для IDE.
Появится возможность отключить генерацию метаданных.
Сгенерированный код можно использовать для тестового прогона AOT Cache, что улучшит производительность при работе JVM с кодом репозиториев.
При использовании реактивных интерфейсов репозиториев AOT не поддерживается.
Towards Spring Tools 5 — Ready for Boot 4 and Framework 7. Предстоящий релиз Spring Tools под номером пять принесет с собой поддержку фич из Spring Boot 4 и Spring Framework:
Версионирование API.
Регистраторы бинов.
AOT-репозитории.
Конфигурация для JSpecify-аннотаций.
Towards Spring Tools 5 — Stereotypes and a new Structural View. Вторая статья про будущее обновление Spring Tools 5. Раньше Spring Tools 5 умел создавать карты запроса и ориентироваться в них с помощью функции Go To Symbols. Эта функциональность эволюционировала и теперь будет использовать концепцию стереотипов из jMolecules 2.0, что позволит создать структурный вид проекта. Spring Tools сгруппирует запросы, контроллеры, JPA-сущности и так далее в логическую структуру, по которой будет легко ориентироваться в проекте. Если в проекте использован Spring Modulith, то логическая структура поделится с учетом модулей.
Offset and Keyset Pagination with Spring Data JPA — Thorben Janssen. Статья на сайте Торбена Янссена посвящена методам пагинации данных в Spring Data JPA: классической, всем хорошо известной пагинации с использованием смещения (offset) и пагинации с использованием ключей (keyset). Автор описывает преимущества и недостатки каждого подхода и предлагает примеры реализации для лучшего понимания.
Любопытные подкасты
Foojay Podcast #82 — OpenJDK Projects (Leyden, Babylon, Panama) и TornadoVM
Выпуск посвящен эволюции экосистемы OpenJDK и связанных с ней проектов:
Project Leyden — ускорение старта JVM через AOT и профилирование.
Project Panama, включая Vector API.
Работе TornadoVM — технологии, позволяющей запускать вычисления (включая AI-нагрузки) на GPU прямо из Java.
Гости рассказывают, как эти проекты могут быть полезны. Например, ускорение запуска Spring Boot-приложений, векторные вычисления для AI-задач и GPU-ускорение.
Foojay Podcast #83 — OpenJDK Evolutions plus Tips and Tricks. В выпуске обсуждают широкий пласт тем: от истории Java и ее портирования на Linux в 1995 году до современных направлений развития. Гости рассуждают о будущем Java, ее применении в мобильных и embedded-средах, клиентских приложениях на JavaFX, затрагивают такие вещи, как: REST vs gRPC, виртуальные потоки vs асинхронность, JMH-бенчмаркинги и даже исследование безопасности в автомобильных системах через Foreign Function & Memory API. В итоге — хороший обзор про актуальные тренды, производительность, сферу применения Java и ее дальнейшую эволюцию.
Просто интересное
Перестаньте думать и начните уже писать код — перевод поста Good Programmers Get Off Their Butts. Пост был написан более 20 лет назад, но он все еще актуален. Невозможно нарисовать идеальный дизайн с помощью UML-диаграмм, точно запланировать работы и уже только потом по диаграммам начать писать код. Если бы это было так, разработчики стали бы не нужны, еще когда появились генераторы кода по UML. Тогда, кстати, тоже верили, что программисты скоро потеряют работу. Ставь лайк, если помнишь те времена ?
Джавовые события
30 августа прошел JVM Day — конференция для Java-, Scala- и Backend-разработчиков. Наконец можно посмотреть записи всех докладов в плейлисте на Youtube и в VK Видео.
Свежие релизы
Spring Boot 4.0 и Spring Framework 7.0. Долгожданный релиз Spring Framework 7.0 сохраняет совместимость с JDK 17, но уже ориентирован на LTS-релиз JDK 25 и переводит базовые спецификации на Jakarta EE 11 + Kotlin 2.2.
Главные новшества:
встроенный механизм версионирования REST-API — поддержка версий через path, header, query/media-type;
новый HTTP-клиент/интерфейсы и тестовые клиенты;
стандартизированные аннотации null-safety через JSpecify вместо устаревших решений;
resilience-фичи типа декларативного retry и ограничения конкуренции (@Retryable, @ConcurrencyLimit);
AOT- и контейнерные оптимизации;
поддержка нативных образов для GraalVM;
модернизация всего стекa под актуальные стандарты и экосистему.
Подробнее — в release notes.
Вместе с фреймворком вышел Spring Boot 4, который базируется на Spring 7 и официально доступен как GA-релиз.
Главные изменения:
модульная автоконфигурация вместо одного тяжелого JAR, что уменьшает вес приложения;
переход на Jackson 3 для JSON-сериализации;
обновленный стек зависимостей;
совместимость с Gradle 9.
Подробнее — в release notes.

Релиз Kora 1.2.5. Новый минорный релиз принес:
аннотацию @Mdc для аспекта логирования;
поддержку OpenAPI-генератора множественной спецификации аутентификации HTTP-клиента через параметр конфигурации;
восстановлено поведение OkHttpClient со значением параметра retryOnConnectionFailure#true по умолчанию;
множественные исправления багов.
Релиз Quarkus 3.30 приносит исправления багов, обновления зависимостей и новые возможности:
поддержку аннотации Jackson @JsonView для сериализации/десериализации в REST-клиентах;
новый класс Decrypt, который предоставляет CLI-команду decrypt для расшифровки секретов с использованием алгоритма AES/GCM/NoPadding;
возможность выбирать методы REST-клиента, для которых должен прокидываться OIDC-токен.
Больше подробностей — в release notes.
В раннем доступе появился Kotlin 2.3.0-RC, в котором JetBrains продолжает готовить язык к следующему большому релизу:
улучшена работа компилятора (умнее резолвинг, меньше нечитаемых ошибок);
стабилизированы некоторые ранее экспериментальные возможности вроде более строгих проверок when и вложенных type alias;
добавлена поддержка новых платформ — Java 25, Gradle 9;
обновился Kotlin/JS и Kotlin/Wasm: для Wasm включены FQ-имена классов по-умолчанию + новая модель обработки исключений, для JS — экспериментальный экспорт suspend-функций + новое представление LongArray как BigInt64Array.
Подробнее — в release notes.
Вышла новая версия IntelliJ IDEA 2025.2.5. Самые заметные изменения:
исправлена обработка API-вызовов при обновлении Docker Engine до версии 29;
проекты Gradle 9.x со Spring Boot теперь корректно запускаются через Gradle Runner;
исправлена проблема, из-за которой IDE могла зависать при сканировании HTTP-файлов с некоторыми JSON-структурами;
плагин GitLab теперь корректно обрабатывает большие ID-пайплайнов.
Подробнее обо всех исправлениях — в release notes.
Вышел Micronaut Framework 4.10.2 — патч-релиз, закрывающий несколько неприятных багов и подтягивающий стабильность экосистемы:
исправлены проблемы в Micronaut Security — некорректная работа JWT в отдельных конфигурациях;
в Micronaut Serialization исправлены утечки при работе с Jackson-модулями;
улучшена совместимость с Micronaut Data и gRPC-модулями;
фикс проблем с @ConfigurationProperties, которые иногда не подхватывали значения в нативных билдах.
Плюс традиционный набор dependency upgrades по всей линейке. Релиз небольшой, но полезный — обновляться можно смело.
Спасибо за прочтение! Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске.
Увидимся через месяц ?