Middle
Dagger çərçivеси жөнүндө айтып бериңиз.
sobes.tech AI
AIден жооп
Dagger — бул Java жана Android үчүн көзкарандыуулукту киргизүү (dependency injection, DI) үчүн рамка. Ал JSR-330 спецификациясына негизделген. Dagger V2 кодду түзүү аркылуу ишке ашыруу учурундагы чыгымдарды жокко чыгарат, бул рефлексиялык DI-рамкаларга мүнөздүү.
Daggerдин негизги түшүнүктөрү:
- Модулдар (
@Module): Класстар, алар көзкарандыуулукту камсыз кылат. Алардын ичинде@Providesбелгиленген методдор объекттердин үлгүлөрүн кайтарат, аларды Dagger киргизе алат.
@Module
public class AppModule {
@Provides
Context provideAppContext(Application app) {
return app.getApplicationContext();
}
}
- Компоненттер (
@Component): Интерфейстер, модулдар менен көзкарандыуулук киргизүү жерлерин байланыштырат. Алар кайтарат объекттердин үлгүлөрүн же киргизүү методдорун (void inject(Target target);).
@Component(modules = AppModule.class)
public interface AppComponent {
Context getAppContext();
void inject(MyApplication application); // Киргизүү методу
}
- Киргизүү (
@Inject): Анотация, Dagger кайда көзкарандыулук камсыз кылыш керек экенин көрсөтөт. Ал конструкторлорго, талааларга жана методдорго колдонулушу мүмкүн.
public class UserManager {
private final UserRepository userRepository;
@Inject // Конструктор аркылуу киргизүү
public UserManager(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
public class MainActivity extends AppCompatActivity {
@Inject // талаа аркылуу киргизүү
UserManager userManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// Компонукту алуу жана көзкарандыуулукту киргизүү
((MyApplication) getApplication()).getAppComponent().inject(this);
}
}
- Караш (
@Singleton,@Scope): Анотациялар, камсыз кылынган көзкарандыулардын жашоо мөөнөтүн аныктайт. Бөлүмдө@Singletonдеп белгиленет, бирок өзүнүн анотацияларын түзүүгө болот.
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerActivity {}
@PerActivity
@Component(modules = ActivityModule.class, dependencies = AppComponent.class)
public interface ActivityComponent {
void inject(MainActivity activity);
}
Daggerдин артыкчылыктары:
- Өндүрүмдүүлүк: Кодду түзүү компиляция учурунда минималдуу чыгымдарды камсыз кылат.
- Типтик коопсуздук: Графтагы каталар компиляция учурунда аныкталат.
- Текшерилүүчүлүк: Dagger түзгөн код окула алат.
- Жөнөкөй тестирлөө: Көзкарандыулук оңой алмаштырылышы мүмкүн моктар менен.
Кемчиликтери:
- Өркүндөтүлгөн үйрөнүү графиги.
- Айрым учурларда — татаал синтаксис.
- Компиляция убактысынын көбөйүшү.
Dagger чоң Android колдонмолорунда көзкарандыуулукту башкаруу жана кодду структуралаштыруу үчүн кеңири колдонулат.