Как хорошо знаешь Dagger 2

«Как хорошо знаешь Dagger 2» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dagger 2 — это популярный DI-фреймворк для Android, который генерирует код на этапе компиляции, обеспечивая производительность.

Ключевые понятия:

  • @Module — классы, предоставляющие зависимости (через @Provides).
  • @Component — мост между модулями и инжектируемыми классами.
  • @Inject — маркирует поля/конструкторы для внедрения зависимостей.
  • @Scope (например, @Singleton) — управляет жизненным циклом зависимостей.

Пример:

@Module  
class AppModule {  
    @Provides  
    @Singleton  
    fun provideApi(): ApiService = Retrofit.Builder().build().create()  
}  

@Component(modules = [AppModule::class])  
@Singleton  
interface AppComponent {  
    fun inject(activity: MainActivity)  
}  

class MainActivity : AppCompatActivity() {  
    @Inject lateinit var api: ApiService  
    override fun onCreate() {  
        DaggerAppComponent.create().inject(this)  
    }  
}  

Плюсы:

  • Нет рефлексии → высокая производительность.
  • Четкая проверка зависимостей на этапе компиляции.

Минусы:

  • Сложность настройки для новичков.
  • Большой boilerplate-код.

Подходит для средних/крупных проектов, где важна модульность и тестируемость.