Behalten Sie alle Klassen im Auge, die eine bestimmte Schnittstelle implementieren?

8

Es ist schwer zu erklären, was ich wirklich will. Ich habe eine Schnittstelle, die eine Methode getRuntimeInfo() hat, die mir alle Laufzeit-Debug-Informationen für die Variablen einer Klasse zur Verfügung stellt. Ich möchte die Liste aller Klassen sehen, die diese Schnittstelle implementieren. Ich benutze Java und Spring. Eine Möglichkeit, dies zu tun, besteht darin, alle Beans aus dem Spring-Kontext abzurufen und den Operator instanceof zu überprüfen. Aber ich würde das nicht für offensichtliche Leistungseinbußen tun wollen. Habe ich eine andere Option?

    
atmaish 04.02.2012, 18:44
quelle

2 Antworten

13

Was ist mit dieser Lösung:

%Vor%

Die Liste wird nur einmal (beim Start) gefüllt, so dass sie keine wesentlichen Auswirkungen auf die "normale" Laufzeitleistung hat.

Kommentar:

  

können Sie Ihren Code erklären

Sie wissen, dass Spring ein IOC Container ist. @Component teilt Spring mit, dass es eine Instanz dieser Klasse erstellen soll (eine sogenannte Spring Managed Bean ). IOC bedeutet auch, dass der Container dafür verantwortlich ist, Referenzen auf andere Instanzen zu injizieren (Spring Managed Beans). @Autowire (sowie @Resource und @Inject - alle machen dasselbe) ist eine solche Annotation, die Spring mitteilt, dass dieses Feld von Spring gefüllt werden sollte. Spring selbst versucht herauszufinden, mit welchen Instanzen das Feld gefüllt werden soll. Eine Standardmethode, die Spring verwendet, ist by type . Dies bedeutet, dass Spring den Typ des Felds überprüft und nach übereinstimmenden Beans sucht. In Ihrem Fall ist es eine generische Liste - das ist ein bisschen speziell. In diesem Fall füllt Spring das Feld mit einer Liste auf, wobei die Elemente alle Beans sind, die dem generischen Typ entsprechen.

    
Ralph 04.02.2012, 20:29
quelle
2

Was ist mit der Methode getBeansOfType von ApplicationContext? Gibt es eine Karte der Beans zurück, die Ihre Schnittstelle implementieren?

Ссылка )

    
Peter Liljenberg 04.02.2012 19:03
quelle

Tags und Links