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.