Spis treści - Dagger 2. Profesjonalne aplikacje dla Androida i Javy
W pytaniach i odpowiedziach
- Rozdział I. Informacje ogólne
- 1. Czym jest Dagger 2?
- 2. Czym jest wstrzykiwanie zależności (DI)?
- 3. Czym jest zależność?
- 4. Na czym polega wstrzykiwanie zależności?
- 5. Jaka jest zasadnicza różnica między wstrzykiwaniem zależności a wzorcem Factory?
- 6. Jak działa wzorzec projektowy Service Locator?
- 7. Jakie są sposoby wstrzykiwania zależności?
- 8. Jak wygląda wstrzykiwanie zależności za pomocą Daggera 2 w praktyce?
- 9. Czym zajmuje się anotacja @Inject?
- 10. Jakie są zalety wykorzystania Daggera 2 do wstrzykiwania zależności?
- 11. Jakie są wady Daggera 2?
- 12. Jakie są konkurencyjne frameworki zajmujące się wstrzykiwaniem zależności?
- 13. Jaka jest relacja Daggera 2 do Daggera 1?
- 14. Na jakiej licencji działa Dagger 2?
- 15. Czy można liczyć na utrzymanie Daggera 2 i jego dalszy rozwój?
- 16. Gdzie można znaleźć kod źródłowy Daggera 2?
- 17. Gdzie można znaleźć dokumentację Daggera 2?
- Rozdział II. Instalacja
- 1. Jak zainstalować Daggera 2 w Javie dla Androida?
- 2. Jak zainstalować Daggera 2 w Kotlinie dla Androida?
- 3. Jak sprawdzić w środowisku Android Studio, czy instalacja Daggera 2 jest poprawna?
- 4. Jak zainstalować Daggera 2 poza środowiskiem Android?
- 5. Jak przetestować w środowisku IntelliJ, czy instalacja jest poprawna?
- 6. Jakie błędy najczęściej można napotkać podczas instalacji Daggera 2?
- Rozdział III. Implementacja
- 1. Jakie podstawowe zagadnienia należy znać przed rozpoczęciem pracy z Daggerem 2?
- 2. Na czym polega automatyzm wstrzykiwania zależności?
- 3. Czym jest graf zależności?
- 4. Jakie są podstawowe anotacje w Daggerze 2?
- 5. Jakie są podstawowe kroki, aby zacząć pracę z Daggerem 2?
- 6. Jak przebiega podstawowy tok pracy z Daggerem 2?
- 7. Czy musi istnieć metoda zwracająca klasę do wstrzyknięcia zarówno w komponencie, jak i module?
- 8. W jaki sposób komponent jest powiązany z modułem?
- 9. Czy można umieścić dwa pola do wstrzyknięcia z różnych komponentów w tej samej klasie?
- 10. Czym jest anotacja @Inject i gdzie może być użyta?
- 11. Jakie znaczenie ma anotacja @Inject na polu?
- 12. Jakie są wymagania wobec pola oznaczonego anotacją @Inject?
- 13. W jaki sposób pole do wstrzyknięcia jest powiązane z komponentem?
- 14. Jakie znaczenie ma anotacja @Inject na konstruktorze?
- 15. Jaki cel ma anotacja @Inject na konstruktorze?
- 16. Jaka jest różnica między anotacją @Inject na konstruktorze a metodą modułową z anotacją @Provides?
- 17. Jakie są wymagania wobec konstruktora z anotacją @Inject?
- 18. W jaki sposób wskazać klasę do wstrzyknięcia przy anotacji @Inject na konstruktorze kilku pasujących klas?
- 19. Który mechanizm ma pierwszeństwo w przypadku konfliktu — z anotacją @Inject czy @Provides?
- 20. Jaki cel ma anotacja @Inject na metodzie?
- 21. W którym momencie jest tworzony obiekt do wstrzyknięcia?
- 22. Jakie są sposoby wstrzykiwania zależności?
- 23. Jakie są dobre praktyki przy implementacji Daggera 2?
- 24. Jakie błędy najczęściej pojawiają się przy implementacji?
- Rozdział IV. Komponenty
- 1. Czym jest komponent?
- 2. Co może być oznaczone anotacją @Component?
- 3. Co może zawierać komponent?
- 4. Czy komponent musi zawierać metody dostarczające obiekty?
- 5. Czy komponent musi deklarować metody wstrzykujące?
- 6. Czy komponent może mieć więcej niż jedną metodę wstrzykującą?
- 7. Jaka jest różnica między metodami dostarczającymi obiekty, a tymi wstrzykującymi zależności?
- 8. Jakie są wymagania wobec metod dostarczających?
- 9. Jakie podstawowe anotacje można spotkać w komponencie?
- 10. Jaka może być nazwa komponentu?
- 11. W jaki sposób można utworzyć obiekt komponentu?
- 12. Czy komponent musi być powiązany z modułem?
- 13. W jaki sposób komponent jest powiązany z modułami?
- 14. Czy można powiązać komponent z modułem inaczej niż przez parametr anotacji?
- 15. Jaka jest przewaga sposobu tworzenia instancji komponentów za pomocą metod builder() i build() nad wykorzystaniem metody create()?
- 16. Czy samodzielne wygenerowanie instancji modułów i przekazanie im zewnętrznych argumentów nie zaprzecza idei wstrzykiwania zależności?
- 17. Jakie znaczenie ma anotacja @Named?
- 18. Jak działa anotacja @Named?
- 19. Gdzie może być używana anotacja @Named?
- 20. Czym jest wspomagane wstrzyknięcie (assisted injection) oraz anotacja @AssistedInject?
- 21. Jaka jest różnica między konstruktorem z anotacją @AssistedInject a @Inject?
- 22. Jak rozwiązywany jest problem anotacji @Assisted i tych samych typów parametrów?
- 23. Czym jest anotacja @Singleton na nazwie komponentu?
- 24. Co znajduje się w implementacji komponentu?
- 25. Jakie mogą być parametry anotacji @Component?
- 26. Jakie są sposoby budowania relacji między komponentami?
- 27. Jak działa parametr anotacji @Component o nazwie dependencies?
- 28. Jakie są zasady budowania relacji między komponentami za pomocą parametru o nazwie dependencies?
- 29. Czym są interfejsy z anotacją @Subcomponent?
- 30. W jaki sposób deklaruje się subkomponenty?
- 31. Jaka jest różnica między budowaniem relacji między komponentami za pomocą parametru o nazwie dependencies a subkomponentami?
- 32. Jak rozwiązywany jest konflikt między tymi samymi typami dostarczanymi przez komponent i jego subkomponent?
- 33. Czy możliwe jest tworzenie wielopoziomowych subkomponentów?
- 34. Jak rozwiązywana jest kwestia zainstalowania tego samego modułu w komponencie i subkomponencie?
- 35. Jak można kontrolować inicjalizowanie obiektu komponentu?
- 36. Jakie znaczenie ma anotacja @BindsInstance?
- 37. Jakie błędy najczęściej pojawiają się przy pracy z komponentami?
- Rozdział V. Moduły
- 1. Czym jest moduł?
- 2. Jakie zadanie spełniają moduły?
- 3. Co może być oznaczone anotacją @Module?
- 4. Czy moduły są konieczne?
- 5. W jaki sposób moduł jest powiązany z komponentami?
- 6. Czy do modułu można przekazywać parametry?
- 7. Czy moduł wie, do jakiego komponentu należy?
- 8. Czy moduł może należeć do wielu komponentów?
- 9. Jakie podstawowe anotacje można spotkać w module?
- 10. Jakie znaczenie ma anotacja @Provides?
- 11. Czy metody oznaczone anotacją @Provides mogą zwracać null?
- 12. Czy metody oznaczone anotacją @Provides mogą być statyczne?
- 13. Jakie znaczenie ma anotacja @Binds?
- 14. Jakie są warunki zastosowania anotacji @Binds?
- 15. Jakie są sposoby dostarczenia obiektów dla wstrzyknięcia zależności?
- 16. Jakie są podobieństwa i różnice między anotacją @Binds i @Provides?
- 17. Jakie znaczenie ma anotacja @Singleton na metodzie modułowej?
- 18. Co oznacza anotacja @Reusable?
- 19. Jakie parametry przyjmuje anotacja @Module?
- 20. Czym są multipowiązania (multibindings) w module?
- 21. Jakie mogą być typy kluczy w multipowiązaniach?
- 22. Czy kolekcja Map to jedyny rodzaj kolekcji w multipowiązaniach?
- 23. Czy kolekcje utworzone automatycznie w ramach multipowiązań są dostępne bezpośrednio?
- 24. Do czego służy anotacja @Multibinds w multipowiązaniach?
- 25. Do czego służy anotacja @BindsOptionalOf?
- 26. Jakie są wymagania wobec metod oznaczonych anotacją @BindsOptionalOf?
- 27. Na czym polega działanie klasy Lazy w Daggerze 2?
- 28. Jaka jest różnica między interfejsem Lazy, a zakresem singleton?
- 29. Jak działa interfejs Provider?
- 30. Czym jest zestaw anotacji Dagger Producers?
- 31. Czym jest interfejs ListenableFuture?
- 32. Jakie zakresy oferuje zestaw anotacji Dagger Producers?
- 33. Jak zestaw anotacji Dagger Producers zarządza subkomponentami?
- 34. Jakie błędy najczęściej pojawiają się przy pracy z modułami?
- Rozdział VI. Zakresy
- 1. Czym są zakresy (scopes)?
- 2. Jak działają zakresy?
- 3. Gdzie mogą być umieszczone anotacje zakresowe?
- 4. Jaka jest relacja między anotacjami zakresowymi na komponencie a tymi na metodzie lub klasy do wstrzyknięcia?
- 5. Jakie znaczenie ma anotacja @Singleton?
- 6. Jak utworzyć własną anotację zakresową?
- 7. Co powoduje, że klasy oznaczone anotacją zakresową stają się singletonem?
- 8. Czy dwie instancje tego samego komponentu korzystają z obiektów w tych samych zakresach?
- 9. Jaka jest różnica między metodą z anotacją zakresową @Singleton a metodą statyczną?
- 10. Czy komponent może być w dwóch zakresach?
- 11. Jak działa anotacja @Reusable?
- 12. Jakie są ograniczenia w użyciu zakresów przy pracy z subkomponentami?
- 13. Jakie są ogólne zasady użycia zakresów?
- 14. Jakie błędy najczęściej pojawiają się przy pracy z zakresami?
- Rozdział VII. Android
- 1. Czy Dagger 2 nadaje się do projektów Androida?
- 2. Jakie są wady pracy z Daggerem 2 na platformie Android?
- 3. W jaki sposób Dagger rozwiązuje problemy pracy z platformą Android?
- 4. Jakie są podstawowe techniki programowania i wzorce, które mogą pomóc w pracy z Daggerem 2 na platformie Android?
- 5. W jaki sposób wstrzyknąć klasę Activity?
- 6. W jaki sposób można zarządzać modułami w Androidzie?
- 7. Jak przekazywać parametry do modułu?
- 8. Jak Android radzi sobie z anotacjami zakresowymi?
- 9. Czy Android odmiennie traktuje subkomponenty?
- 10. Jaki jest cykl życia subkomponentów w relacji do komponentu głównego?
- Rozdział VIII. Android — pakiet dagger.android
- 1. Czym jest pakiet dagger.android?
- 2. Jakie zadanie ma spełniać pakiet dagger.android?
- 3. Jak wstrzykuje się klasy Activity jeżeli chodzi o pakiet dagger.android?
- 4. Jak działa wstrzykiwanie klas Activity za pomocą pakietu dagger.android?
- 5. Czy można za pomocą pakietu dagger.android wstrzyknąć klasy Fragment?
- 6. Jak działa wstrzykiwanie klas Fragment za pomocą pakietu dagger.android?
- 7. Czy można uprościć obsługę wstrzykiwania za pomocą pakietu dagger.android?
- 8. Jak działa uproszczona metoda wstrzykiwania za pomocą pakietu dagger.android?
- 9. Według jakiego wzorca najlepiej dostarczać moduły, które definiują anotację @ContributesAndroidInjector?
- Rozdział IX. Android — pakiet dagger. hilt
- 1. Czym jest Hilt?
- 2. Jaka jest relacja biblioteki Hilt do Daggera 2?
- 3. Jak działa Hilt?
- 4. Jakie są cele, zalety i wady pakietu Hilt?
- 5. W jaki sposób zainstalować bibiotekę Hilt?
- 6. Jakie są podstawowe zasady pracy z pakietem Hilt?
- 7. Jaka jest podstawowa klasa pakietu Hilt?
- 8. Jak w pakiecie Hilt funkcjonują komponenty i ich zakresy?
- 9. Jak tworzone są komponenty w pakiecie Hilt?
- 10. Jakie są cykle życia komponentów w pakiecie Hilt?
- 11. Czy pakiet Hilt dostarcza jakieś domyślne obiekty?
- 12. Czy wygenerowane komponenty są ze sobą jakoś powiązane?
- 13. Jak obsługiwać poszczególne elementy platformy Android w pakiecie Hilt?
- 14. Jak obsługiwane są klasy View w pakiecie Hilt?
- 15. Jakie znaczenie mają moduły w pakiecie Hilt?
- 16. Czym w pakiecie Hilt jest punkt wejścia?
- 17. Czy można definiować niestandardowe komponenty w pakiecie Hilt?
- Rozdział X. Testowanie
- 1. Czy Dagger 2 nadaje się do przeprowadzania testów?
- 2. Jakie są sposoby testowania w Daggerze 2?
- 3. Jak przebiega testowanie w pakiecie Hilt?
- 4. W jaki sposób klasy testowe uzyskują dostęp do poszczególnych elementów pakietu Hilt?
- 5. Jak można modyfikować powiązania przy testowaniu w pakiecie Hilt?