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.