Aký je rozdiel medzi Dagger 1 a Dagger 2?
sobes.tech AI
Odpoveď od AI
Hlavný rozdiel spočíva v tom, že Dagger 2 generuje kód počas kompilácie, zatiaľ čo Dagger 1 sa spoliehal na reflexiu počas behu.
Výhody Dagger 2 oproti Dagger 1:
- Výkon: Absencia reflexie robí beh rýchlejším.
- Ladenie: Chyby konfigurácie sú viditeľné počas kompilácie, nie počas behu.
- Spoľahlivosť: Generovaný kód je predvídateľnejší a ľahšie testovateľný.
- Žiadne skryté chyby: Reflexia môže skrývať chyby, ktoré sa prejavia len za určitých podmienok.
V Dagger 1 sa používali anotácie @Module a @Inject, ako aj triedy @ObjectGraph na správu závislostí.
V Dagger 2 sa tiež používajú @Module a @Inject, ale hlavný mechanizmus je @Component, ktorý funguje ako továreň na injektované objekty a je generovaný Daggerom.
Príklad modulu v Dagger 1:
// Dagger 1 Modul
@Module(injects = MyActivity.class)
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Príklad modulu v Dagger 2:
// Dagger 2 Modul
@Module
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Príklad komponentu v Dagger 2:
// Dagger 2 Komponent
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(MyActivity activity);
}
Hlavný princíp Dagger 2: opisujete graf závislostí pomocou modulov a anotácií, a Dagger generuje triedy, ktoré tento graf implementujú, čo umožňuje získať inštancie závislostí. Toto pripomína ručné písanie fabrík, ale automaticky a efektívne.