Dagger 2 ma walidację podczas kompilacji, więc dlaczego adnotacje zakresu mają retencję RUNTIME
? Dlaczego są potrzebne w czasie wykonywania?Dlaczego adnotacje zakresu mają retencję RUNTIME w Dagger 2?
Odpowiedz
Chociaż nie wiem na pewno, przypuszczam, że zakresy muszą mieć retencję w środowisku wykonawczym, ponieważ JSR 330's @Scope
wymaga, aby zakresy były przechowywane w środowisku wykonawczym. Zarówno Dagger 1, jak i Dagger 2 reklamują kompatybilność z JSR-330 i (jak wspomina w komentarzach David) istnieje wiele rozwiązań wtryskowych opartych na zależnościach runtime, które bezwzględnie wymagają adnotacji zakresu zachowanych.
W szczególności dla Daggera, nie mogę sobie wyobrazić, dlaczego byłyby one faktycznie czytane w czasie wykonywania, choć przypuszczam, że niektóre biblioteki zewnętrzne mogłyby skorzystać z adnotacji.
Edytuj z komentarzy: To nie jest problem, dziedzictwo lub inaczej: Wiele systemów DI konfiguruje się w środowisku wykonawczym i wymaga adnotacji. Sztylet wyróżnia się tym, że tak nie jest, ale specyfikacja nie została napisana w sposób umożliwiający zachowanie czasu podtrzymania jako opcjonalnego. Dzięki temu programiści aplikacji mogą zastąpić Daggera innym środowiskiem JSR330, takim jak Guice lub Spring, i zwalniają twórców bibliotek z tego, że narzędzia i ramy zgodne z DI są agnostyczne, niezależnie od tego, czy są skonfigurowane w czasie kompilacji czy skonfigurowane w czasie wykonywania. Ta przejrzystość (tzn. Bez opcji implementacji) i elastyczność (czas kompilacji lub środowisko wykonawcze) wydaje się warta kosztów niepotrzebnej retencji adnotacji i kosztów nauki.
To jest jak stary problem? Nie upraszcza używania Dagger 2. –
Dzięki, bardzo pomogłeś. –
- 1. Dlaczego funkcja @FunctionalInterface ma retencję RUNTIME?
- 2. Scopes in Dagger 2
- 3. Implementacja Dagger 2 i interfejsu
- 4. Java - dlaczego klasy System i Runtime mają identyczne metody?
- 5. Nierozwiązane odniesienie dla Dagger 2 w Kotlin
- 6. Jaką funkcję mają te adnotacje Java?
- 7. Jak utworzyć wykres zależności zależności Dagger 2?
- 8. Android: Dagger 2 i wtrysk konstruktora
- 9. Jaki jest cel metod getter w Components w Dagger 2?
- 10. Nie można znaleźć klasy symbolu "Wygenerowano" dla Dagger 2
- 11. Jak używać kwalifikatora Dagger 2 @Named w Kotlin
- 12. Dagger v2: wstrzykiwać 2 różne zakresy w jeden obiekt
- 13. Dlaczego rails wymaga JavaScript Runtime?
- 14. Dlaczego wyjątek runtime jest odznaczony wyjątek?
- 15. Dlaczego wyjątki Runtime "są odznaczone" w Javie?
- 16. Dlaczego wskaźniki zakresu w zwiększeniu
- 17. Jak zapewnić dostęp do zasobów za pomocą Google Dagger 2
- 18. Dlaczego 2 == [2] w JavaScript?
- 19. Adnotacje danych ASP.NET MVC 2 w dynamicznie generowanym modelu
- 20. Singletons in Dagger 1.x
- 21. Dlaczego nazwy struktur mają typedef?
- 22. Dlaczego istnieją różne adnotacje zarządzania fasola
- 23. Dlaczego niektóre witryny mają? Utf8 = ✓ w tytule?
- 24. Dlaczego listy Scala nie mają zamawiania?
- 25. Wygenerowany klasa dla Komponentu Dagger 2 nie znajduje się w compileTestJava Java Plugin Gradle za
- 26. Wiosenne adnotacje MVC
- 27. Kiedy używać Dagger w aplikacji na Androida?
- 28. Traceback na Dagger .plus() w niekompletnym rodzica
- 29. Realm.io/Dagger/Databinding w tym samym projekcie
- 30. Przestarzałe adnotacje w FindBugs 2.0
Dodając do powyższego, JSR 330 na pewno nie miał na myśli sztyletu, istnieją również struktury wtryskowe zależne od środowiska wykonawczego, które * będą * potrzebować. –