Коротко о Dagger2

Component/SubComponent

Module

Scope

Способы inject-а

Основные элементы(аннотации) Dagger 2:

  1. @Inject – базовая аннотация, с помощью которой “запрашивается зависимость”
  2. @Module – классы, чьи методы “предоставляют зависимости”
  3. @Provide – методы внутри @Module, “говорящие Dagger, как мы хотим сконструировать и предоставить зависимость“
  4. @Component – мост между @Inject и @Module.Или другими словами, Компонент представляет собой готовый граф зависимостей.
  5. @Scope – предоставляют возможность создания глобальных и “локальных синглтонов”
  6. @Qualifier – если необходимы разные объекты одного типа

Отличие от первой версии

Кодогенерация. Полученный код понятен и доступен для отладки.

Никаких проблем при обфускации. Dagger1 работал на рефлексии. Отсюда проблемы с производительностью, обфускацией, загадочными падениями в рантайме.

Component dependencies

Данный способ связи перекачивал из Dagger 1.
Особенности Component dependencies:

  1. Два зависимых компонента не могут иметь одинаковый scope.
  2. Родительский компонент в своем интерфейсе должен явно задавать объекты, которыми могут пользоваться зависимые компоненты.
  3. Компонент может зависеть от нескольких компонент.

Subcomponents

Фича уже Dagger2.
Особенности:

  1. Необходимо прописывать в интерфейсе родителя метод получения Сабкомпонента (упрощенное название Subcomponent)
  2. Для Сабкомпонента доступны все объекты родителя
  3. Родитель может быть только один