Sobes.tech
Middle+

Kuo skiriasi Dagger 1 nuo Dagger 2?

sobes.tech AI

Atsakymas iš AI

Pagrindinis skirtumas tas, kad Dagger 2 generuoja kodą kompiliacijos metu, o Dagger 1 pasikliaudavo refleksija vykdymo metu.

Dagger 2 pranašumai prieš Dagger 1:

  • Veikimas: Refleksijos nebuvimas daro vykdymą greitesnį.
  • Derinimas: Konfigūracijos klaidos matomos kompiliacijos metu, o ne vykdymo metu.
  • Patikimumas: Sugeneruotas kodas yra geriau prognozuojamas ir testuojamas.
  • Paslėptų klaidų nebuvimas: Refleksija gali paslėpti klaidas, kurios pasireiškia tik tam tikromis sąlygomis.

Dagger 1 naudota @Module ir @Inject anotacijos, taip pat @ObjectGraph klasės priklausomybių valdymui.

Dagger 2 taip pat naudoja @Module ir @Inject, bet pagrindinis mechanizmas yra @Component, kuris yra fabrikas į injektuojamus objektus ir generuojamas Dagger.

Pavyzdys Dagger 1 moduliui:

// Dagger 1 Modulis
@Module(injects = MyActivity.class)
public class MyModule {

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

Pavyzdys Dagger 2 moduliui:

// Dagger 2 Modulis
@Module
public class MyModule {

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

Pavyzdys Dagger 2 komponentui:

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

    void inject(MyActivity activity);
}

Pagrindinis Dagger 2 principas: aprašote priklausomybių grafiką naudodami modulius ir anotacijas, o Dagger generuoja klases, kurios įgyvendina šį grafiką, suteikdamos galimybę gauti priklausomybių egzempliorius. Tai primena rankiniu būdu rašytas fabrikas, bet automatiškai ir efektyviai.