Mi a különbség a Dagger 1 és a Dagger 2 között?
sobes.tech MI
Válasz az MI-től
A fő különbség az, hogy a Dagger 2 kódot a fordítási időben generál, míg a Dagger 1 a futási időben a reflexióra (reflection) támaszkodott.
A Dagger 2 előnyei a Dagger 1-hez képest:
- Teljesítmény: A reflexió hiánya gyorsabb futási időt eredményez.
- Hibakeresés: A konfigurációs hibák fordítási időben láthatók, nem futás közben.
- Megbízhatóság: A generált kód jobban előre jelezhető és könnyebben tesztelhető.
- Rejtett hibák hiánya: A reflexió elrejtheti azokat a hibákat, amelyek csak bizonyos körülmények között jelentkeznek.
A Dagger 1-ben az @Module és @Inject annotációkat, valamint az @ObjectGraph osztályokat használták a függőségek kezelésére.
A Dagger 2-ben szintén az @Module és @Inject használatos, de a fő mechanizmus az @Component, amely egy gyárként működik az injektálható objektumok számára, és a Dagger generálja.
Példa egy modulra Dagger 1-ben:
// Dagger 1 Modul
@Module(injects = MyActivity.class)
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Példa egy modulra Dagger 2-ben:
// Dagger 2 Modul
@Module
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Példa egy komponensre Dagger 2-ben:
// Dagger 2 Komponens
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(MyActivity activity);
}
A Dagger 2 fő elve: modulok és annotációk segítségével leírja a függőségi gráfot, majd a Dagger generálja azokat a osztályokat, amelyek ezt a gráfot valósítják meg, lehetővé téve a függőségek példányosítását. Ez hasonlít a kézi gyárak írására, de automatikusan és hatékonyan.