Spring АйО
10.3K subscribers
424 photos
291 videos
550 links
Русскоязычное сообщество Spring-разработчиков.

Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy

Чат для общения: @spring_aio_chat
По вопросам сотрудничества: @befayer
Download Telegram
Media is too big
VIEW IN TELEGRAM
🍃 Экосистема Spring, секьюрность Docker, как не уронить базу из-за кеша | Spring АйО Подкаст №50

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍97👎1
Forwarded from Amplicode
Media is too big
VIEW IN TELEGRAM
Ctrl+C → Ctrl+V на стероидах

Автоимпорт при копировании кода — штука настолько приятная и удобная, что без неё уже невозможно представить работу в IDE.

Мы пошли дальше и вслед за умным импортом во время набора кода сделали автоматическую инжекцию бинов при копировании кода!

Теперь при копировании кода Amplicode автоматически добавляет нужную инжекцию бинов. С учётом контекста, @Primary, @Qualifier, дженериков, @Bean-методов, Java и Kotlin — без ручной возни после вставки.

Доступно всем пользователям Amplicode, без подписки.
👍34🤯13🔥952👎1🤔1
🍃 Стань частью Spring АйО × JPoint 😀

Друзья, хотим напомнить, что в этом году Spring АйО представляет собственный трек на конференции JPoint.

Помимо самого выступления хотим напомнить о дополнительных фичах участия:

– возможность пообщаться с легендами мира IT
– получить ачивку "я спикер вообще-то"
– побывать на стендах ведущих компаний РФ
– бесплатно съездить и пожить в столице
– послушать другие доклады
– оторваться на афтерпати
– попросить больше з/п у руководства (тут гарантий не дадим, только инструкцию)


После первого поста трек почти укомплектован. Но осталась пара мест. Если сомневаешься - эксперты не кусаются и покажут, как лучше, где поправить, а где, наоборот, вышло уже супер круто.

📩 Заявку на участие можно оставить тут: https://spring-aio.ru/2026
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍86🤩1
🔥 HotSpot AOT-кэш: стартуем быстрее, греемся меньше

В HotSpot появился AOT-кэш, который сохраняет уже разобранные, загруженные и слинкованные классы приложения. Это снижает warm-up time и ускоряет выход на пик после старта.

JDK 24:

Трёхшаговый процесс train+assemble+run (JEP 483).

Training:

-XX:AOTMode=record -XX:AOTConfiguration=app.aotconf

Создает конфигурацию, необходимую для дальнейшего построения кеша.

Assembly:

-XX:AOTMode=create ... -XX:AOTCache=app.aot собирает кэш.

Run:

-XX:AOTCache=app.aot использует его при запуске.


JDK 25:

В кэш добавили профили часто выполняемых методов (JEP 515), из-за чего JIT может стартовать компиляцию раньше и прогрев ускоряется.

Также появился упрощённый workflow в 2 шага через -XX:AOTCacheOutput=app.aot (JEP 514), но он может требовать 2x памяти: при -Xms2g -Xmx2g окружению нужно около 4 ГБ, потому что сборка кэша запускается с отдельной кучей того же размера.

Чтобы кэш применился, окружения должны совпадать: тот же JDK/OS/архитектура, classpath только из JAR без wildcard/каталогов, prod classpath - надмножество training.

Проверка: -XX:AOTMode=on.


JDK 26:

С JDK 26 сняли ограничение по ZGC (JEP 516). Для диагностики: -Xlog:aot,class+path=info. Кэш нужно пересоздавать при любой пересборке приложения или обновлении библиотек/JDK, иначе возможны краши и странное поведение.


📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/995398/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1576👍4
👩‍💻 Программирование, ориентированное на данные, для Java: за пределами record-классов

Record-классы удобны, пока класс = «состояние, всё состояние и ничего кроме». Любое отклонение (API канонического конутруктора не равно внутреннему представлению, нужно наследование) ломает «автогенерацию» и паттерн-деструктурирование (destructuring).

В новом переводе от команды Spring АйО статьи Brian`а Goetz`а, архитектора Java Language, предлагается следующий шаг в направлении data-oriented programming in Java: классы-носители и интерфейсы-носители (они же Carrier classes & interfaces). Концептуально, carrier классы родились из record-ов путем ослабления части их ограничений.

Комментарий от Михаила Поливаха:

Друзья, помните, пожалуйста, что данная статья по сути является суммированием обсуждения Carrier классов из JDK Project Amber Mailing List. Я это к тому, что пока непонятно, в какой версии языка carrier классы появятся, и появятся ли они в том виде, в котором представлены в статье. Статья больше пища для размышления


📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/995824/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥1082
⚠️ Java продолжает готовиться к удалению finalize()

В рамках JDK 27 у ThreadPoolExecutor-а, очень популярного API в Java, будет удалён метод finalize(). Несмотря на то, что в силу dynamic dispatch вызов метода finalize() всё равно будет транслирован в Object, данное изменение не source level compatible.

А все потому, что у Object.finalize() сигнатура содержит throws Throwable, в то время как ThreadPoolExecutor.finalize() — нет. Пока метод был в ThreadPoolExecutor, компилятору было ок. Как только его удалят, вызов super.finalize() начнет резолвиться в Object.finalize(), и тогда прилетит “unreported exception Throwable”.

Комментарий от Михаила Поливаха:
Вот это кстати довольно редкий пример того, что имзенение может быть binary level compatible, но не source level compatible.


Например:


class MyPool extends ThreadPoolExecutor {
@Override
protected void finalize() {
super.finalize(); // JDK 27: теперь это Object.finalize() throws Throwable
}
}


Как избежать?

* поискать и удалить любые finalize() / super.finalize() (и вообще любые авто-cleanup через финализацию)
* управлять жизненным циклом executor’ов явно: shutdown()/awaitTermination() или просто close() в try-with-resources (да, ExecutorServiceAutoCloseable)

Spring АйО рекомендует не использовать finalize() в целом, но если подобного рода хук нужен, то лучше использовать Java Cleaner API. С его помощью нельзя "случайно" воскресить объект, сломать integrity объекта или т.п.

Ждем JDK 27 🫠
👍28🔥96
Media is too big
VIEW IN TELEGRAM
🍃 Java без Spring`а, это ИИ подкаст, HotSpot AOT-кэш | Spring АйО Подкаст №51

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1842😁2🔥1🤯1
Forwarded from OpenIDE
Reksoft ❤‍🔥 OpenIDE

В прошлом году Reksoft перевёл Kotlin/Java-команды на OpenIDE с Amplicode из-за ограничений лицензий JetBrains.

Тестировали Eclipse, VS Code и GigaIDE. Первые два потребовали много ручной настройки и уступали по навигации и поддержке Spring/Kotlin. GigaIDE оказалась близка к IntelliJ Community, но до Dev Experience IntelliJ Ultimate не дотянула.

OpenIDE с Amplicode закрыла ключевые требования: генерация CRUD и тестов, docker-compose из интерфейса, встроенный HTTP-клиент, reactive debugger и интеграция с Git.

В итоге почти все JVM-команды в Reksoft сейчас используют OpenIDE.

📚 Подробнее в блоге компании Reksoft на Habr: История одного безальтернативного переезда. Почему мы выбрали OpenIDE
🔥26👍16😁54🤔3🤯1
Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)

Records и pattern matching сделали чтение вложенных данных в Java удобным. Но обновить поле глубоко внутри неизменяемой структуры все еще больно: чтобы поменять одну строку (street у адреса менеджера отдела), приходится вручную пересобирать каждый record по пути. В примере это около 25 строк с каскадом копирующих конструкторов и риском ошибки на каждом уровне.

Потенциально новые методы withX() в record помогают мало: обновленное значение все равно нужно протаскивать назад через Address -> Employee -> Department -> Company. Даже JEP 468 (with для records, preview в JDK 25) упрощает один уровень, но не поддерживает вложенное обновление, поэтому получаются цепочки with на каждом слое.

Оптики закрывают этот разрыв: это типобезопасные, компонуемые пути доступа, которые позволяют один раз описать маршрут и дальше читать/писать по нему. Базовая оптика - Lens (ровно 1 цель), есть Prism (0/1 вариант sealed), Affine (0/1 без построения), Traversal (0..many для коллекций). Скомпонованные линзы сами выполняют промежуточную реконструкцию, и обновление превращается в одно простое выражение.

📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001066/
🔥18🤯118👍4🤔1
😵 Руководство по ArchUnit — как модульно тестировать архитектуру

Соблюдение определённой структуры пакетов или архитектуры крайне важно. Особенно в Java, где для корректной работы некоторые элементы должны быть public или действительно доступны за пределами своего пакета.

В новом переводе от команды Spring АйО рассмотрим библиотеку с открытым исходным кодом ArchUnit, которая помогает в тех случаях, когда одного компилятора недостаточно.

📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001486/
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥105
🍃 Ceylon и NULL: как сделать null нормальным

В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения.

В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО.

Комментарий от Михаила Поливаха:

Статья достаточно старая, написанная Лукасом Едером (автор Jooq) про реализацию nullability Ceylon.

Конечно, Ceylon довольно старый язык, мёртвый на данный момент. Его дизайнером кстати когда-то выступал сам Gavin King (тот самый автор Hibernate).

Тем не менее, это единственный относительно известный на моей памяти язык поверх JVM, который поддерживал Union типы (не считая Scala 3), через которые и была сделана реализация nullable типов в Ceylon.

Статья больше призвана расширить Ваш кругозор и призвать Вас к осмысленной дискуссии. Приятного чтения.


📚Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001982/
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1310👍91
TechMeetup #11: Spring АйО x МТС Банк

Осталось 5 дней...

В программе:

Доклады от экспертов Spring АйО:
👤 Евгений Сулейманов: HTTP Service Clients + API Versioning в Spring Boot 4: типобезопасный REST без зоопарка клиентов (и без боли при эволюции API);

👤 Павел Кислов: Тренды в Spring. Куда мы движемся и что поменялось в Spring Framework за 2025 год.;

👤 Михаил Поливаха: Встречайте Axelix: Спецназ для вашей Spring Boot экосистемы;

👥 Дискуссия "Мы видим перед собой последнее поколение разработчиков?" со взглядом бизнеса, менеджмента и разработки:
Федор Сазонов, CEO OpenIDE;
Павел Кислов, Developer Advocate Amplicode;
Марат Рахимов, Директор по AI-трансформации МТС Банка;

🗓 Когда: 26 февраля 2026, с 19:00 до 22:30 GMT+03:00 (онлайн и офлайн);
📍 Где (офлайн): Москва, м. Технопарк. Проспект Андропова 18, корпус 1. (Здание с вывеской МТС Банк, Медиарум);

💻 Онлайн трансляция будет на странице мероприятия
требуется регистрация на формат посещения "Онлайн"

👍 Участие: бесплатно
🎉 Нетворкинг: бесценно

Регистрация продолжается до 23-го февраля на странице мероприятия
Количество мест ограничено, успей забронировать место

Spring АйО | МТС Банк

---

Рассылка подтверждений будет до 24-го февраля включительно.
Не забудь проверить свою почту, включая папку «Спам» и «Промо».


TechMeetup | CFP: Подать доклад | Общалка и вопросы | Записи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍138🔥4
Media is too big
VIEW IN TELEGRAM
🍃 JVM язык Ceylon, K1 тяжелый, зачем нам ArchUnit | Spring АйО Подкаст №52

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
🤩 СЛУШАТЬ НА SPOTIFY
🤩 СЛУШАТЬ НА APPLE PODCASTS

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥139👍81