Sobes.tech
Back to questions
Junior — Middle
84

Чем отличаются аннотации @Provides и @Binds в контексте Dependency Injection?

Companies where asked
Effective Technologies
Ozon FreshOzon Fresh

Answer from AI

sobes.tech AI

В контексте Dependency Injection (DI) в Android (например, с Dagger или Hilt) аннотации @Provides и @Binds используются для указания, как создавать зависимости, но отличаются по способу и применению:

  • @Provides применяется к методам, которые создают и возвращают объект. В таких методах можно писать произвольный код для создания экземпляра.

    @Provides
    MyInterface provideMyInterface() {
        return new MyImplementation();
    }
    
  • @Binds используется для связывания интерфейса с конкретной реализацией, но требует, чтобы реализация уже была предоставлена где-то ещё (например, через конструктор с @Inject). Метод с @Binds должен быть абстрактным и просто возвращать интерфейс.

    @Binds
    abstract MyInterface bindMyInterface(MyImplementation impl);
    

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

  • @Provides позволяет писать логику создания объекта.
  • @Binds просто связывает интерфейс с реализацией, без дополнительного кода.

Использование @Binds более эффективно и предпочтительно, когда реализация уже доступна через конструктор, так как генерируется более оптимальный код.