Trudno wyjaśnić, czego naprawdę chcę. Mam interfejs, który ma metodę getRuntimeInfo()
, która dostarcza mi wszystkich informacji o debugowaniu środowiska wykonawczego dla zmiennych klasy. Chcę zobaczyć listę wszystkich klas, które implementują ten interfejs. Używam Java i Spring. Jednym ze sposobów, w jaki mogę to zrobić, jest pobranie wszystkich ziaren z kontekstu wiosennego i sprawdzenie za pomocą operatora instanceof
. Ale nie chciałbym tego robić z oczywistych wpływów na wydajność. Czy mam jakąś inną opcję?Śledzenie wszystkich klas implementujących dany interfejs?
Odpowiedz
Co o tym rozwiązaniu:
@Component
public class WithAllMyInterfaceImpls {
@Autowire
List<MyInterface> allBeansThatImplementTheMyInterface;
}
lista jest wypełniana tylko raz (przy starcie), więc nie powinno to mieć znaczący wpływ na „normalnym” wydajności wykonawczego.
Komentarz:
można wyjaśnić kod
Wiesz Wiosna to MKOl pojemnika. @Component
mówi Springowi, że powinna utworzyć instancję tej klasy (tak zwana Spring Managed Bean). IOC oznacza również, że Container jest odpowiedzialny za wprowadzanie odniesień do innych przypadków (Spring Managed Beans). @Autowire
(a także @Resource
i @Inject
- wszystkie robią to samo) to taka adnotacja, która mówi Springowi, że to pole powinno być wypełnione wiosną. Sama wiosna próbuje dowiedzieć się, z jakimi instancjami należy zapełnić pole. Domyślną techniką, z której korzysta wiosna, jest by type
, co oznacza, że Spring sprawdza typ pola i wyszukuje pasujące ziarna. W twoim przypadku jest to ogólna lista - jest to trochę wyjątkowe. W tym przypadku Spring wypełni pole listą, w której elementami są wszystkie fasole pasujące do typu ogólnego.
Co powiesz na metodę getBeansOfType z ApplicationContext? Zwraca Mapę fasoli implementującą twój interfejs?
- 1. Znajdowanie wszystkich klas implementujących konkretny interfejs
- 2. Jak znaleźć wszystkie wystąpienia typów implementujących dany interfejs podczas debugowania
- 3. PHP: jak uzyskać listę klas implementujących określony interfejs?
- 4. Jak uzyskać wartości właściwości klas implementujących interfejs w oknie Locals?
- 5. Uzyskiwanie wszystkich typów implementujących interfejs w .NET Core
- 6. Jak wyświetlić listę wszystkich klas ścieżki klasy, która implementuje dany zbiór interfejsów?
- 7. W diagramach klas, czy w klasach implementujących interfejs należy powtarzać nazwy metod?
- 8. Jak wyświetlić listę wszystkich klas zgodnych z protokołem w Swift?
- 9. Śledzenie pozycji wszystkich elementów w jQuery sortable
- 10. Jak ustalić, czy klasa Java implementuje dany interfejs
- 11. Udostępnianie konfiguracji dla wszystkich klas
- 12. Implementacja dla wszystkich klas BsonIgnoreExtraElements
- 13. Lista wszystkich klas BEZ Javadocs
- 14. git: jak mogę wymienić wszystkich plików obecnych na dany popełnić?
- 15. Pozbywanie się członków implementujących IDisposable
- 16. xdebug śledzenie/śledzenie php echo, drukowanie wywołań
- 17. Superinterfejs XJC i superklasa tylko dla wszystkich klas?
- 18. Śledzenie ruchu kontra śledzenie kropli
- 19. Lista wszystkich klas domen w Grails
- 20. Eclipse: wymień metody i zmienne wszystkich klas
- 21. Dopasowywanie wszystkich kombinacji dowolnych klas w jQuery
- 22. Android dexclassloader uzyskać listę wszystkich klas
- 23. C#: Lista wszystkich klas w zestawie
- 24. Znajdowanie wszystkich klas o określonym atrybucie
- 25. Jak wymusić śledzenie stosu dla wszystkich błędów krytycznych w Perlu?
- 26. Jak napisać ogólną klasę kontenera, która implementuje dany interfejs w języku C#?
- 27. Konwersja/instalacja systemu iOS Śledzenie/instalacja Śledzenie
- 28. Find dany zbiór punktów
- 29. Scroll dany div tag
- 30. wstrzyknąć różnych klas, które implementują ten sam interfejs korzystając Ninject
Jest to zwykła funkcja automatycznego wypalania sprężyny, nie ma w niej nic szczególnego. Jest to po prostu główna cecha sprężynowa: – Ralph
@ user1117398: Przedłużyłem swoją odpowiedź, aby nieco to wyjaśnić. - Wygląda na to, że powinieneś przeczytać wiosnę 3.0 !!! lub 3.1 samouczek. – Ralph