Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥9👍7👎4😁1🤯1
В прошлом посте мы подробно разобрали, как
@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
👍32❤13🔥8⚡4👎4
🧨 Rich Errors в Kotlin 2.4: шаг вперёд или шаг в сторону?
На KotlinConf 2025 анонсировали одну из самых обсуждаемых новинок Kotlin — Rich Errors. Вместо того чтобы выбрасывать исключения, теперь функции могут возвращать возможные ошибки как часть своей сигнатуры:
Такой подход делает потенциальные сбои явными, упрощает тестирование и избавляет от try-catch для предсказуемых ошибок. Новинка уже доступна в Kotlin 2.4 и, по мнению авторов, особенно полезна в бизнес-логике.
Но в сообществе мнения разделились.
✅ Что говорят сторонники Rich Errors?
🛑 Это логичное продолжение идеи безопасности типов, как null safety.
🛑 Ошибки становятся частью API — теперь явно видно, какие именно проблемы могут возникнуть.
🛑 try-catch больше не нужен там, где ошибка — ожидаемый результат.
🛑 Тестировать становится проще: вместо моков и исключений — обычная проверка значения.
🛑 Хорошо сочетается с функциональными паттернами без необходимости подключать сторонние библиотеки.
⚠️ Что вызывает сомнения?
🛑 В контроллерах и сервисах с большим числом потенциальных ошибок сигнатуры методов становятся громоздкими.
🛑 Нет способа элегантно агрегировать ошибки: A | B | C работает, но не имеет общей семантики.
🛑 В рамках Spring-приложений реалистичная польза ограничена — фреймворки останутся на исключениях.
🛑 Добавление такого типа обработки может серьёзно сказаться на времени компиляции.
💭 И что теперь?
Для одних Rich Errors — это долгожданное улучшение и эволюция Kotlin. Для других — спорный эксперимент, который добавляет сложности без ощутимой пользы в реальных проектах.
А вы как думаете? Используете ли Rich Errors в своём коде — или пока просто наблюдаете со стороны?
Ох и жарким же будет обсуждение этой новости в следующем выпуске подкаста Spring АйО 🫣
На KotlinConf 2025 анонсировали одну из самых обсуждаемых новинок Kotlin — Rich Errors. Вместо того чтобы выбрасывать исключения, теперь функции могут возвращать возможные ошибки как часть своей сигнатуры:
fun fetchUser(): User | NetworkError
Такой подход делает потенциальные сбои явными, упрощает тестирование и избавляет от try-catch для предсказуемых ошибок. Новинка уже доступна в Kotlin 2.4 и, по мнению авторов, особенно полезна в бизнес-логике.
Но в сообществе мнения разделились.
✅ Что говорят сторонники Rich Errors?
⚠️ Что вызывает сомнения?
💭 И что теперь?
Для одних Rich Errors — это долгожданное улучшение и эволюция Kotlin. Для других — спорный эксперимент, который добавляет сложности без ощутимой пользы в реальных проектах.
А вы как думаете? Используете ли Rich Errors в своём коде — или пока просто наблюдаете со стороны?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔23👍13❤5👎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/
Команда Spring АйО перевела статью от JetBrains, в которой анонсировано важное обновление: начиная с версии 2025.3, IntelliJ IDEA будет распространяться в виде единого дистрибутива, вместо отдельных версий Community и Ultimate.
Теперь каждый разработчик получит более мощный, гибкий и удобный инструмент «из коробки», независимо от подписки. Open source-компоненты по-прежнему доступны, а новая модель обещает улучшенный user experience, бесплатный доступ к большему числу функций и упрощённый процесс сборки из исходников.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/928668/
🔥38🤔15🤯9⚡8❤5👎1😁1
Forwarded from Amplicode
Мы не могли обойти это замечательное событие стороной и решили провести прямую трансляцию, посвященную ему.
В программе мероприятия доклад о ConneKt — новом HTTP-клиенте для IntelliJ IDEA, который теперь становится Open Source!
Спикеры:
🫶 Онлайн. Бесплатно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥10❤7👎1
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– JEP 511: Импорт модулей в Java 25 — как упростить работу с библиотеками
– Spring сдаёт позиции, Hibernate под угрозой, AI-агенты захватывают Россию | Spring АйО Подкаст №26
– Аннотация Lazy как спасение от циклических зависимостей
– Rich Errors в Kotlin 2.4: шаг вперёд или шаг в сторону?
– IntelliJ IDEA переходит на единый дистрибутив
– Amplicode: День рождения Kotlin уже на следующей неделе!
– JPoint: Алексей Рагозин — Data retrieval на пальцах
– Деплоим Spring Boot приложение через Docker Compose в Timeweb Cloud за 10 минут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5❤4
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍10❤5
Поздравляем всех, кто пишет, учит, продвигает и просто любит Kotlin — язык, который сделал разработку на JVM (и не только!) понятнее, приятнее и современнее. Этот язык программирования был впервые представлен компанией JetBrains 22 июля 2011 года.
С момента первой стабильной версии (1.0) в 2016 году Kotlin прошёл впечатляющий путь:
Kotlin давно вышел за пределы JetBrains: его используют в крупных продакшн-проектах по всему миру, о нём говорят на конференциях, а комьюнити — одно из самых тёплых и активных.
С днём рождения, Kotlin! 🎂
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥61❤17👍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 МСК
📍 Бесплатно, онлайн, на всех наших платформах. Главное – зарегистрироваться.
🔗 ЗАРЕГИСТРИРОВАТЬСЯ
Александр Шустанов, Михаил Поливаха и Павел Кислов продемонстрируют, как OpenIDE поддерживает мультиязычную разработку в рамках одной IDE. В формате демо реализуем бизнес-функцию охватывающую 4 сервиса на разных языках: TypeScript, Go, Python и Java/Kotlin. Расскажем, как единый инструмент упрощает навигацию, отладку и работу в мультикомандных проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥13👍8⚡1👎1👌1
🧩 Spring Data JDBC и R2DBC 4.0 получат поддержку составных идентификаторов
Эксперт Spring АйО и по совместительству Spring Data контрибьютор Михаил Поливаха прокомментировал статью, переведенную командой Spring АйО, про поддержку составных ключей со стороны Spring Data JDBC и R2DBC, начиная с версии 4.0.0-M4 — то, чего так не хватало при работе с моделями, где первичный ключ состоит из нескольких полей.
Теперь достаточно просто описать record с нужными полями, пометить его как
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/930354/
Эксперт 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🔥11❤9🤩1
🔥 Spring АйО — это живое сообщество
Хотите что-то обсудить? Нашли интересную статью? Есть вопрос, на который нужен экспертный взгляд?
Предлагайте темы для постов и переводов — просто напишите нам в личку.
Мы всегда на связи — обсуждаем, спорим, поддерживаем и растём вместе. Нам важно ваше мнение, ваш опыт, ваши вопросы. Также не забывайте про наш чат, эксперты Spring АйО в нем всегда на связи!
Давайте делать контент вместе!
Хотите что-то обсудить? Нашли интересную статью? Есть вопрос, на который нужен экспертный взгляд?
Предлагайте темы для постов и переводов — просто напишите нам в личку.
Мы всегда на связи — обсуждаем, спорим, поддерживаем и растём вместе. Нам важно ваше мнение, ваш опыт, ваши вопросы. Также не забывайте про наш чат, эксперты Spring АйО в нем всегда на связи!
Давайте делать контент вместе!
❤16🔥8👍4
🛠 Structured Concurrency в Java: наконец-то находит опору
API structured concurrency в Java наконец-то обрёл устойчивость. В новом переводе от команды Spring АйО подробно рассматриваются последние изменения, появившиеся с выходом JEP 505: фабричный метод
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/930812/
API structured concurrency в Java наконец-то обрёл устойчивость. В новом переводе от команды Spring АйО подробно рассматриваются последние изменения, появившиеся с выходом JEP 505: фабричный метод
open()
, политики Joiner'ов, улучшенная отмена задач, дедлайны, передача контекста через ScopedValues
и строгая защита от ошибок использования. Всё это делает параллельное программирование в Java более безопасным, читаемым и управляемым.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/930812/
🔥23👍11❤9
Forwarded from Amplicode
Media is too big
VIEW IN TELEGRAM
Роман Елизаров, Илья Кучмин и Александр Шустанов:
––––– Таймкоды –––––
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?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤12👍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 больше не понадобится флаг
Теперь достаточно:
Пруфы?
– Протестировано в проде на сотнях сервисов Amazon.
– Прогнано по полному тест-сьюту JDK в Oracle.
– Отдельные компании уже бэкпортят фичу на JDK 21 и 17.
Что важно знать?
– По умолчанию выключено.
– Не влияет на функциональность приложения.
– Может потребовать внимания в будущем, если другие фичи потребуют больше битов в заголовке (но для этого есть решения в рамках проектов Valhalla и Lilliput).
Обсудим в комментариях? 👇
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🔥17❤11
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁47🔥11👍6