Коротко о Dagger2
Component/SubComponent
Module
Scope
Способы inject-а
Основные элементы(аннотации) Dagger 2:
@Inject– базовая аннотация, с помощью которой “запрашивается зависимость”@Module– классы, чьи методы “предоставляют зависимости”@Provide– методы внутри@Module, “говорящие Dagger, как мы хотим сконструировать и предоставить зависимость“@Component– мост между@Injectи@Module.Или другими словами, Компонент представляет собой готовый граф зависимостей.@Scope– предоставляют возможность создания глобальных и “локальных синглтонов”@Qualifier– если необходимы разные объекты одного типа
Отличие от первой версии
Кодогенерация. Полученный код понятен и доступен для отладки.
Никаких проблем при обфускации. Dagger1 работал на рефлексии. Отсюда проблемы с производительностью, обфускацией, загадочными падениями в рантайме.
Component dependencies
Данный способ связи перекачивал из Dagger 1.
Особенности Component dependencies:
- Два зависимых компонента не могут иметь одинаковый scope.
- Родительский компонент в своем интерфейсе должен явно задавать объекты, которыми могут пользоваться зависимые компоненты.
- Компонент может зависеть от нескольких компонент.
Subcomponents
Фича уже Dagger2.
Особенности:
- Необходимо прописывать в интерфейсе родителя метод получения Сабкомпонента (упрощенное название Subcomponent)
- Для Сабкомпонента доступны все объекты родителя
- Родитель может быть только один