Middle
Pastāstiet par Dagger ietvaru.
sobes.tech AI
Atbilde no AI
Dagger ir rāmja priekš atkarību injekcijas (dependency injection, DI) Java un Android vidēs. Tas balstās uz JSR-330 specifikāciju. Dagger V2 izmanto koda ģenerēšanu kompilācijas laikā, kas novērš izpildes laikā raksturīgās izmaksas, kas raksturīgas refleksīviem DI rāmjiem.
Dagger galvenās jēdzieni:
- Moduļi (
@Module): Klases, kas nodrošina atkarības. Tajās iezīmētās@Providesmetodes atgriež objektu eksemplārus, kurus Dagger var injicēt.
@Module
public class AppModule {
@Provides
Context provideAppContext(Application app) {
return app.getApplicationContext();
}
}
- Komponenti (
@Component): Saziņas interfeisi, kas savieno moduļus un injekcijas vietas. Tie satur metodes, kas atgriež atkarību eksemplārus vai injekcijas metodes (void inject(Target target);).
@Component(modules = AppModule.class)
public interface AppComponent {
Context getAppContext();
void inject(MyApplication application); // Injekcijas metode
}
- Injekcija (
@Inject): Anotācija, kas norāda Dagger, kur jānodrošina atkarība. To var lietot konstruktoros, laukos un metodēs.
public class UserManager {
private final UserRepository userRepository;
@Inject // Injekcija caur konstruktoru
public UserManager(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
public class MainActivity extends AppCompatActivity {
@Inject // Injekcija caur lauku
UserManager userManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// Komponenta iegūšana un atkarību injekcija
((MyApplication) getApplication()).getAppComponent().inject(this);
}
}
- Aptvērums (
@Singleton,@Scope): Anotācijas, kas nosaka nodrošināto atkarību dzīves cikla ilgumu. Pēc noklusējuma ir@Singleton, bet var izveidot savas apgabala anotācijas.
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {}
@PerActivity
@Component(modules = ActivityModule.class, dependencies = AppComponent.class)
public interface ActivityComponent {
void inject(MainActivity activity);
}
Dagger priekšrocības:
- Veiktspēja: Koda ģenerēšana kompilācijas laikā samazina izpildes laikā radušās izmaksas.
- Tipu drošība: Kļūdas atkarību grafikā tiek atklātas kompilācijas laikā.
- Pārbaudāmība: Dagger ģenerētais kods ir lasāms.
- Viegla testēšana: Atkarības viegli var aizstāt ar mock objektiem.
Trūkumi:
- Steile mācīšanās līkne.
- Dažos gadījumos — sarežģīta sintakse.
- Palielināts kompilācijas laiks.
Dagger aktīvi tiek izmantots lielās Android lietojumprogrammās atkarību pārvaldībai un koda strukturēšanai.