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.