Middle
Rääkige Daggeri raamist.
sobes.tech AI
Vastus AI-lt
Dagger on raamistiku sõltuvuste süstimiseks (dependency injection, DI) Java ja Androidi jaoks. See põhineb JSR-330 spetsifikatsioonil. Dagger V2 kasutab koodi genereerimist kompileerimise ajal, mis kõrvaldab jooksva aja kulud, mis on tüüpilised refleksiivsetele DI raamistikule.
Daggeri põhiteadmised:
- Moodulid (
@Module): Klassid, mis pakuvad sõltuvusi. Nendes märgitud@Providesmeetodid tagastavad objektide eksemplare, mida Dagger saab süstida.
@Module
public class AppModule {
@Provides
Context provideAppContext(Application app) {
return app.getApplicationContext();
}
}
- Komponendid (
@Component): Liidesed, mis ühendavad mooduleid ja süstimise kohti. Nad sisaldavad meetodeid, mis tagastavad sõltuvuste eksemplare või süstimise meetodeid (void inject(Target target);).
@Component(modules = AppModule.class)
public interface AppComponent {
Context getAppContext();
void inject(MyApplication application); // Süstimise meetod
}
- Süstimine (
@Inject): Anotatsioon, mis näitab Daggerile, kuhu tuleb sõltuvus pakkuda. Seda saab kasutada konstruktoritel, väljad ja meetodid.
public class UserManager {
private final UserRepository userRepository;
@Inject // Süstimine konstruktoriga
public UserManager(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
public class MainActivity extends AppCompatActivity {
@Inject // Süstimine väljal
UserManager userManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// Komponendi saamine ja sõltuvuste süstimine
((MyApplication) getApplication()).getAppComponent().inject(this);
}
}
- Vahemik (
@Singleton,@Scope): Anotatsioonid, mis määravad pakutavate sõltuvuste eluea. Vaikimisi on@Singleton, kuid saab luua ka oma vahemiku anotatsioone.
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {}
@PerActivity
@Component(modules = ActivityModule.class, dependencies = AppComponent.class)
public interface ActivityComponent {
void inject(MainActivity activity);
}
Daggeri eelised:
- Tõhusus: Koodi genereerimine kompileerimise ajal minimeerib jooksva aja kulud.
- Tüübiturvalisus: Viga graafikus avastatakse kompileerimise ajal.
- Kontrollitavus: Daggeri genereeritud kood on loetav.
- Lihtne testimine: Sõltuvusi saab hõlpsasti asendada mock-idega.
Puudused:
- Järsk õppimiskõver.
- Mõnikord keeruline süntaks.
- Pikeneb kompileerimise aeg.
Dagger on aktiivselt kasutusel suurtes Android rakendustes sõltuvuste haldamiseks ja koodi struktuuri korraldamiseks.