TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.39K subscribers
Post #8218 1.48K
Компактный runtime-DI для Java: JSR-330, Class-File API и миграция за 2 дня

Когда начинал разработку системы многомерного анализа данных временных рядов Dimension-UI, для внедрения зависимостей в исходном коде решил использовать Dagger 2. Практический опыт показал, что для приложений с большим количеством динамически создаваемых объектов инверсия зависимостей, реализованная в Dagger 2, не подходит.

Да, создание графа зависимостей в compile-time — это, во-первых, очень быстро, и, во-вторых, удобно: получаешь сообщения об ошибках конфигурации уже при компиляции.

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

Чтобы реализовать scope-зависимости, приходится писать и поддерживать много инфраструктурного кода внутри объектов, куда мы внедряем зависимости. В Dagger 2 такая реализация, во-первых, «загрязняет» код, а во-вторых, серьезно осложняет тестирование. Изолировать методы удобным способом не получается: в тестах нужно писать очень много кода, чтобы прокинуть необходимый контекст и корректно мокировать внешние зависимости. Я туда просто не полез — покрывал unit- и UI-тестами только базовую функциональность, где были Singleton-зависимости.

Даже с одними Singleton’ами приходится поднимать отдельную тестовую инфраструктуру для запуска приложения в тестовом режиме. Это не просто неудобно — это очень затратно по времени. Если сравнить усилия, которые надо потратить на реализацию тестирования подобного функционала в Spring и Dagger… Сравнение будет не в пользу Dagger. В целом я начал думать о переходе на runtime-генерацию графа зависимостей.


Читать: https://habr.com/ru/articles/962326/?utm_campaign=962326

@a_cup_of_java | Другие наши каналы
More from @a_cup_of_java
  1. Sep 21, 2026Spring и Hibernate: как очищать тестовые данные без @DataJpaTest Hibernate ORM 6.2 добавил…
  2. Sep 21, 2026Как Hardwood ускоряет чтение фиксированных списков Parquet Parquet кодирует координаты и в…
  3. Sep 21, 2026Как сборщики мусора JDK связывают память и производительность JDK предлагает несколько сбо…
  4. Sep 20, 2026Docker Compose с JDK 26: зависимости в контейнерах, Java локально В примере Maven-приложен…
  5. Sep 20, 2026Как перевести Dev Services на новый API Quarkus 3.25 В Quarkus 3.25 появился новый API для…
  6. Sep 20, 2026Hibernate 7: как заменить устаревший @GenericGenerator При миграции на Hibernate 7 аннотац…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →