Sobes.tech
Middle+

Qual é a diferença entre Dagger 1 e Dagger 2?

sobes.tech IA

Resposta da IA

A principal diferença é que o Dagger 2 gera código na fase de compilação, enquanto o Dagger 1 confiava na reflexão em tempo de execução.

Vantagens do Dagger 2 em relação ao Dagger 1:

  • Desempenho: A ausência de reflexão torna o tempo de execução mais rápido.
  • Depuração: Os erros de configuração são visíveis na fase de compilação, não em tempo de execução.
  • Confiabilidade: O código gerado é mais previsível e testável.
  • Ausência de erros ocultos: A reflexão pode esconder erros que só aparecem sob certas condições.

No Dagger 1, usavam-se as anotações @Module e @Inject, bem como as classes @ObjectGraph para gerir as dependências.

No Dagger 2, também se usam @Module e @Inject, mas o mecanismo principal é o @Component, que funciona como uma fábrica para objetos injetados e é gerado pelo Dagger.

Exemplo de módulo no Dagger 1:

// Módulo Dagger 1
@Module(injects = MyActivity.class)
public class MyModule {

    @Provides
    public MyDependency provideMyDependency() {
        return new MyDependency();
    }
}

Exemplo de módulo no Dagger 2:

// Módulo Dagger 2
@Module
public class MyModule {

    @Provides
    public MyDependency provideMyDependency() {
        return new MyDependency();
    }
}

Exemplo de componente no Dagger 2:

// Componente Dagger 2
@Component(modules = MyModule.class)
public interface MyComponent {

    void inject(MyActivity activity);
}

Princípio principal do Dagger 2: descreve o grafo de dependências usando módulos e anotações, e o Dagger gera classes que implementam esse grafo, permitindo obter instâncias de dependências. Isto lembra a escrita manual de fábricas, mas de forma automática e eficiente.