Spring АйО
8.43K subscribers
303 photos
209 videos
402 links
Русскоязычное сообщество Spring-разработчиков.

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

Канал для общения: @spring_aio_chat
Download Telegram
Media is too big
VIEW IN TELEGRAM
🍃 Spring сдаёт позиции, Hibernate под угрозой, AI-агенты захватывают Россию | Spring АйО Подкаст №26

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

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥9👍7👎4😁1🤯1
🦥 Аннотация Lazy как спасение от циклических зависимостей

В прошлом посте мы подробно разобрали, как @Lazy помогает экономить ресурсы и ускорять старт приложения. Но забыли упомянуть ещё один крайне полезный кейс применения этой аннотации — борьбу с циклическими зависимостями.

Если в приложении бин A зависит от бина B, а бин B в свою очередь зависит от A — вы получите классическую circular dependency. Spring просто не сможет создать такие бины через конструкторы. Однако, если применить @Lazy на одном из аргументов, Spring обернёт зависимость в прокси и разорвёт цикл.


@Service
public class ServiceA {
private final ServiceB serviceB;

public ServiceA(@Lazy ServiceB serviceB) {
this.serviceB = serviceB;
}
}


Важно: @Lazy здесь влияет только на точку инжекции, а не на весь бин. Оба бина будут инициализированы жадно, но зависимость будет подгружена позже.

Если же вы хотите, чтобы инициализация бина проходила лениво (при первом обращении к бину), то отметьте аннотацией @Lazy и сам бин тоже:


@Lazy
@Service
public class ServiceB {
// ...
}


⚠️ Использование свойства: spring.main.allow-circular-references=true

Это ещё один способ разрешить циклы на уровне конфигурации. Spring сам предложит это в логах, если столкнётся с циклом:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.


Но будьте осторожны:
– Это работает только с field-based и setter-based инжекцией
– Если используете constructor-based инжекцию, то приложение по прежнему не запустится, лишь немного изменится сообщение в логах
– До Spring Boot 2.6 это поведение было включено по умолчанию — после обновления многие столкнулись с неожиданными фейлами.

Поэтому такой подход стоит рассматривать как временную меру, а не как архитектурное решение.

#SpringTips #Lazy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3213🔥84👎4
🧨 Rich Errors в Kotlin 2.4: шаг вперёд или шаг в сторону?

На KotlinConf 2025 анонсировали одну из самых обсуждаемых новинок Kotlin — Rich Errors. Вместо того чтобы выбрасывать исключения, теперь функции могут возвращать возможные ошибки как часть своей сигнатуры:


fun fetchUser(): User | NetworkError


Такой подход делает потенциальные сбои явными, упрощает тестирование и избавляет от try-catch для предсказуемых ошибок. Новинка уже доступна в Kotlin 2.4 и, по мнению авторов, особенно полезна в бизнес-логике.

Но в сообществе мнения разделились.

Что говорят сторонники Rich Errors?

🛑Это логичное продолжение идеи безопасности типов, как null safety.
🛑Ошибки становятся частью API — теперь явно видно, какие именно проблемы могут возникнуть.
🛑try-catch больше не нужен там, где ошибка — ожидаемый результат.
🛑Тестировать становится проще: вместо моков и исключений — обычная проверка значения.
🛑Хорошо сочетается с функциональными паттернами без необходимости подключать сторонние библиотеки.

⚠️ Что вызывает сомнения?

🛑В контроллерах и сервисах с большим числом потенциальных ошибок сигнатуры методов становятся громоздкими.
🛑Нет способа элегантно агрегировать ошибки: A | B | C работает, но не имеет общей семантики.
🛑В рамках Spring-приложений реалистичная польза ограничена — фреймворки останутся на исключениях.
🛑Добавление такого типа обработки может серьёзно сказаться на времени компиляции.

💭 И что теперь?

Для одних Rich Errors — это долгожданное улучшение и эволюция Kotlin. Для других — спорный эксперимент, который добавляет сложности без ощутимой пользы в реальных проектах.

А вы как думаете? Используете ли Rich Errors в своём коде — или пока просто наблюдаете со стороны?

Ох и жарким же будет обсуждение этой новости в следующем выпуске подкаста Spring АйО 🫣
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔23👍135👎5🔥3
🚀 IntelliJ IDEA переходит на единый дистрибутив

Команда Spring АйО перевела статью от JetBrains, в которой анонсировано важное обновление: начиная с версии 2025.3, IntelliJ IDEA будет распространяться в виде единого дистрибутива, вместо отдельных версий Community и Ultimate.

Теперь каждый разработчик получит более мощный, гибкий и удобный инструмент «из коробки», независимо от подписки. Open source-компоненты по-прежнему доступны, а новая модель обещает улучшенный user experience, бесплатный доступ к большему числу функций и упрощённый процесс сборки из исходников.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/928668/
🔥38🤔15🤯985👎1😁1
Forwarded from Amplicode
🥳 День рождения Kotlin уже на следующей неделе!

Мы не могли обойти это замечательное событие стороной и решили провести прямую трансляцию, посвященную ему.

В программе мероприятия доклад о ConneKt — новом HTTP-клиенте для IntelliJ IDEA, который теперь становится Open Source!

Спикеры:
🛑 Роман Елизаров (Автор корутин в Kotlin)
🛑 Илья Кучмин (Developer Advocate Amplicode)
🛑 Александр Шустанов (Product Manager в Amplicode)

📅 22 июля, 17:00 МСК
🫶 Онлайн. Бесплатно.
🔗 Зарегистрироваться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥107👎1
Media is too big
VIEW IN TELEGRAM
🍃 IntelliJ IDEA переходит на единый дистрибутив, Rich Errors в Kotlin | Spring АйО Подкаст №27

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

💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍105
👩‍💻 Kotlin празднует день рождения!

Поздравляем всех, кто пишет, учит, продвигает и просто любит Kotlin — язык, который сделал разработку на JVM (и не только!) понятнее, приятнее и современнее. Этот язык программирования был впервые представлен компанией JetBrains 22 июля 2011 года.

С момента первой стабильной версии (1.0) в 2016 году Kotlin прошёл впечатляющий путь:

🛑2017 — Google объявила Kotlin официально поддерживаемым языком для Android
🛑2019 — Kotlin стал preferred language для Android-разработки
🛑2020 — вышел Kotlin 1.4 с улучшенной производительностью и новым тулчейном
🛑2023 — представлена стабильная версия нового компилятора K2
🛑2024 — Kotlin Multiplatform стал стабильным: теперь можно всерьёз писать на Kotlin под Android, iOS, Web и Desktop

Kotlin давно вышел за пределы JetBrains: его используют в крупных продакшн-проектах по всему миру, о нём говорят на конференциях, а комьюнити — одно из самых тёплых и активных.

С днём рождения, Kotlin! 🎂
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6117👍16
Forwarded from OpenIDE
This media is not supported in your browser
VIEW IN TELEGRAM
Один инструмент для многих языков

Александр Шустанов, Михаил Поливаха и Павел Кислов продемонстрируют, как OpenIDE поддерживает мультиязычную разработку в рамках одной IDE. В формате демо реализуем бизнес-функцию охватывающую 4 сервиса на разных языках: TypeScript, Go, Python и Java/Kotlin. Расскажем, как единый инструмент упрощает навигацию, отладку и работу в мультикомандных проектах.

📅 31 июля в 17:00 МСК
📍 Бесплатно, онлайн, на всех наших платформах. Главное – зарегистрироваться.

🔗 ЗАРЕГИСТРИРОВАТЬСЯ
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥13👍81👎1👌1
🧩 Spring Data JDBC и R2DBC 4.0 получат поддержку составных идентификаторов

Эксперт Spring АйО и по совместительству Spring Data контрибьютор Михаил Поливаха прокомментировал статью, переведенную командой Spring АйО, про поддержку составных ключей со стороны Spring Data JDBC и R2DBC, начиная с версии 4.0.0-M4 — то, чего так не хватало при работе с моделями, где первичный ключ состоит из нескольких полей.

Теперь достаточно просто описать record с нужными полями, пометить его как @Id, и Spring Data сам корректно построит SQL-сущность.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/930354/
👍25🔥119🤩1
🔥 Spring АйО — это живое сообщество

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

Мы всегда на связи — обсуждаем, спорим, поддерживаем и растём вместе. Нам важно ваше мнение, ваш опыт, ваши вопросы. Также не забывайте про наш чат, эксперты Spring АйО в нем всегда на связи!

Давайте делать контент вместе!
16🔥8👍4
🛠 Structured Concurrency в Java: наконец-то находит опору

API structured concurrency в Java наконец-то обрёл устойчивость. В новом переводе от команды Spring АйО подробно рассматриваются последние изменения, появившиеся с выходом JEP 505: фабричный метод open(), политики Joiner'ов, улучшенная отмена задач, дедлайны, передача контекста через ScopedValues и строгая защита от ошибок использования. Всё это делает параллельное программирование в Java более безопасным, читаемым и управляемым.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/930812/
🔥23👍119
Forwarded from Amplicode
Media is too big
VIEW IN TELEGRAM
⚡️ Connekt: Новый HTTP-клиент для IntelliJ IDEA — теперь Open Source

Роман Елизаров, Илья Кучмин и Александр Шустанов:

🛑 Обсудили, почему стандартных инструментов в IDE и консольных тулов часто недостаточно для сложных сценариев.
🛑 Показали, как с помощью ConneKt просто вызывать HTTP-сервисы, строить цепочки запросов, извлекать данные из ответов и писать ассерты.
🛑 Разобрались, как использовать клиент в IDE, CI и консоли.

––––– Таймкоды –––––
00:00:00 – Хайлайты
00:00:41 – Вступление. О чём сегодня поговорим?
00:05:10 – Демо. Основные возможности Connekt и мощная интеграция со Spring Boot.
00:44:43 – Демо. Connekt и работа с защищенными эндпоинтами (авторизация, аутентификация, Spring Security)
00:59:51 – Демо. Работаем с внешним API используя Connekt. Формируем цепочки вызовов
01:17:55 – Заключение. А что еще умеет Connekt?


😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1912👍10
🧠 JEP 519: Компактные заголовки объектов — теперь официально!

Java 25 анонсирует ещё одну немаловажную фичу: компактные заголовки объектов (Compact Object Headers). Это позволит JVM экономить память и ускоряться без вмешательства в код.

Что это такое?
У каждого объекта в Java есть заголовок — служебные данные, которые JVM использует для синхронизации, GC и т.д. Обычно заголовок занимает 96 бит (12 байт) на 64-битных платформах.

С JEP 450 в Java 24 появится экспериментальная опция сжать заголовки до 64 бит (8 байт). JEP 519 делает это стабильной, проверенной фичей, которую можно безопасно включать прямо в проде.

Зачем?
– Минус 22% памяти в SPECjbb2015
– Минус 8% CPU в среднем
– Минус 15% сборок мусора в G1 и Parallel GC
– +10% скорость парсинга JSON

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

Как включить?
В Java 25 больше не понадобится флаг


-XX:+UnlockExperimentalVMOptions


Теперь достаточно:

java -XX:+UseCompactObjectHeaders ...


Пруфы?
– Протестировано в проде на сотнях сервисов Amazon.
– Прогнано по полному тест-сьюту JDK в Oracle.
– Отдельные компании уже бэкпортят фичу на JDK 21 и 17.

Что важно знать?
– По умолчанию выключено.
– Не влияет на функциональность приложения.
– Может потребовать внимания в будущем, если другие фичи потребуют больше битов в заголовке (но для этого есть решения в рамках проектов Valhalla и Lilliput).

Обсудим в комментариях? 👇
👍37🔥1711