Sobes.tech
Middle+

Mis vahe on Dagger 1 ja Dagger 2 vahel?

sobes.tech AI

Vastus AI-lt

Põhiline erinevus seisneb selles, et Dagger 2 genereerib koodi kompileerimise ajal, samal ajal kui Dagger 1 tugines refleksioonile jooksvalt.

Dagger 2 eelised Dagger 1 ees:

  • Jõudlus: Refleksiooni puudumine muudab jooksu kiiremaks.
  • Veaotsing: Konfiguratsioonivead on nähtavad kompileerimise ajal, mitte jooksu ajal.
  • Usaldusväärsus: Genereeritud kood on paremini ennustatav ja testitav.
  • Peidetud vigade puudumine: Refleksioon võib varjata vigu, mis ilmnevad ainult teatud tingimustel.

Dagger 1 kasutas @Module ja @Inject annotatsioone ning ka @ObjectGraph klasse sõltuvuste haldamiseks.

Dagger 2 kasutab samuti @Module ja @Inject, kuid põhimehhanism on @Component, mis on tehas injekteeritavate objektide jaoks ja genereeritakse Daggeri poolt.

Näide Dagger 1 moodulist:

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

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

Näide Dagger 2 moodulist:

// Dagger 2 Moodul
@Module
public class MyModule {

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

Näide Dagger 2 komponendist:

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

    void inject(MyActivity activity);
}

Dagger 2 põhiprintsiip: kirjeldad sõltuvusgraafiku kasutades mooduleid ja annotatsioone ning Dagger genereerib klassid, mis realiseerivad selle graafiku, võimaldades saada sõltuvuste eksemplare. See meenutab käsitsi kirjutatud fabrike, kuid automaatselt ja tõhusalt.