Dagger — это фреймворк для внедрения зависимостей (dependency injection, DI) в Java и Android. Он основан на спецификации JSR-330. V2 Dagger использует генерацию кода на этапе компиляции, что исключает накладные расходы во время выполнения, характерные для рефлексивных DI-фреймворков.
Ключевые понятия Dagger:
@Module): Классы, которые предоставляют зависимости. Внутри них методы, помеченные @Provides, возвращают экземпляры объектов, которые Dagger может внедрить.java
@Component): Интерфейсы, которые связывают модули и места внедрения зависимостей. Они содержат методы, которые возвращают экземпляры зависимостей или методы внедрения (void inject(Target target);).java
@Inject): Аннотация, указывающая Dagger, где нужно предоставить зависимость. Может применяться к конструкторам, полям и методам.java
@Singleton, @Scope): Аннотации, определяющие время жизни предоставляемых зависимостей. @Singleton по умолчанию, но можно создавать свои аннотации области видимости.java
Преимущества Dagger:
Недостатки:
Dagger активно используется в крупных Android-приложениях для управления зависимостями и структурирования кода.