Sobes.tech
Middle+

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.