Kāda ir atšķirība starp Dagger 1 un Dagger 2?
sobes.tech AI
Atbilde no AI
Galvenā atšķirība ir tā, ka Dagger 2 ģenerē kodu kompilācijas laikā, bet Dagger 1 balstījās uz refleksiju darbības laikā.
Dagger 2 priekšrocības salīdzinājumā ar Dagger 1:
- Veiktspēja: Refleksijas neesamība padara darbību ātrāku.
- Atkļūdošana: Konfigurācijas kļūdas ir redzamas kompilācijas laikā, nevis darbības laikā.
- Uzticamība: Ģenerētais kods ir labāk prognozējams un testējams.
- Slēptu kļūdu neesamība: Refleksija var slēpt kļūdas, kas izpaužas tikai noteiktos apstākļos.
Dagger 1 izmantoja @Module un @Inject anotācijas, kā arī @ObjectGraph klases atkarību pārvaldībai.
Dagger 2 arī izmanto @Module un @Inject, bet galvenais mehānisms ir @Component, kas ir fabrika injicējamiem objektiem un tiek ģenerēts ar Dagger.
Piemērs Dagger 1 modulim:
// Dagger 1 Modulis
@Module(injects = MyActivity.class)
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Piemērs Dagger 2 modulim:
// Dagger 2 Modulis
@Module
public class MyModule {
@Provides
public MyDependency provideMyDependency() {
return new MyDependency();
}
}
Piemērs Dagger 2 komponentam:
// Dagger 2 Komponents
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(MyActivity activity);
}
Galvenais Dagger 2 princips: jūs aprakstāt atkarību grafiku ar moduļiem un anotācijām, un Dagger ģenerē klases, kas realizē šo grafiku, nodrošinot iespēju iegūt atkarību eksemplārus. Tas atgādina manuāli rakstītu fabriku, bet automātiski un efektīvi.