È difficile spiegare cosa voglio veramente. Ho un'interfaccia che ha un metodo getRuntimeInfo()
che mi fornisce tutte le informazioni di debug di runtime per le variabili di una classe. Voglio vedere l'elenco di tutte le classi che implementano questa interfaccia. Sto usando Java e Spring. Un modo per farlo è quello di ottenere tutti i bean dal contesto Spring e controllare usando l'operatore instanceof
. Ma non vorrei farlo per ovvi impatti sulle prestazioni. Ho qualche altra opzione?Tieni traccia di tutte le classi che implementano una particolare interfaccia?
risposta
Che dire di questa soluzione:
@Component
public class WithAllMyInterfaceImpls {
@Autowire
List<MyInterface> allBeansThatImplementTheMyInterface;
}
La lista è popolata solo una volta (all'avvio) in modo che non dovrebbe avere un impatto significativo nella performance "normale" fase di esecuzione.
Commento:
si può spiegare il codice
Sai primavera è un contenitore del CIO. @Component
dice a Spring che dovrebbe creare un'istanza di questa classe (un cosiddetto Spring Managed Bean). IOC significa anche che il contenitore è responsabile di inserire riferimenti ad altre istanze (Spring Managed Beans). @Autowire
(così come @Resource
e @Inject
- tutti fanno lo stesso) è una tale annotazione che indica a Spring che questo campo deve essere compilato da Spring. La stessa primavera cerca di capire con quali istanze il campo dovrebbe essere popolato. Una tecnica predefinita utilizzata da Spring è by type
, ciò significa che Spring controlla il tipo di campo e cerca i bean corrispondenti. Nel tuo caso è una lista generica - questo è un po 'speciale. In questo caso, Spring riempie il campo con un elenco, in cui gli elementi sono tutti i bean che corrispondono al tipo generico.
E il metodo getBeansOfType da ApplicationContext? Restituisce una mappa dei fagioli che implementa la tua interfaccia?
- 1. Come trovare tutte le classi che implementano una determinata interfaccia?
- 2. Enumerare tutte le classi Delphi che implementano una determinata interfaccia?
- 3. Ninject legano tutte le classi che implementano la stessa interfaccia
- 4. Istanziare tutte le classi che implementano un'interfaccia specifica
- 5. Come trovare tutte le classi che implementano IDisposable?
- 6. Trovare tutte le classi che implementano un'interfaccia specifica
- 7. Tieni traccia dei progressi di una `mappa`
- 8. stesso metodo per più classi che implementano la stessa interfaccia
- 9. Ottieni tutte le classi che implementano un tratto in Scala utilizzando la riflessione
- 10. JAXB - classi generate implementano l'interfaccia
- 11. Trovare tutte le classi con un particolare attributo
- 12. Come evitare di scrivere test di unità duplicati per classi che implementano la stessa interfaccia?
- 13. Elenca tutte le classi che ereditano da una classe/interfaccia specifica
- 14. Perché il metodo Object clone() è disponibile solo per le classi che implementano l'interfaccia Cloneable?
- 15. Come elencare tutte le classi sul percorso classe che implementa un determinato insieme di interfacce
- 16. PHP: come ottenere un elenco di classi che implementano determinate interfacce?
- 17. Java: loop su tutte le classi nel classpath
- 18. Service e DAO implementano sempre le interfacce
- 19. Utilizzo di LINQ con classi che implementano ICollection non generico
- 20. Esistono classi standard Java che implementano Iterable senza implementare Collection?
- 21. Come specificare un parametro di tipo che NON implementa una particolare interfaccia?
- 22. Casting tra le classi che condividono la stessa interfaccia
- 23. Trova tutte le classi con una specifica attribut
- 24. come registrare tutte le classi di un'interfaccia particolare utilizzando il contenitore di servizi predefinito .net
- 25. In che modo le rotaie implementano before_filter?
- 26. Ottenere Elenco di tutte le classi native
- 27. come è possibile utilizzare il per-ogni ciclo per le classi che non implementano Iterable
- 28. Ottenere tutte le classi ereditarie di una generica classe astratta
- 29. Come comprimere tutte le classi che delinea in Visual Studio
- 30. Come trovare tutte le istanze di tipi che implementano un'interfaccia specifica durante il debug
È solo la normale funzione di autowiring della molla, non c'è niente di speciale. È solo la caratteristica di base della molla – Ralph
@ user1117398: ho esteso la mia risposta per spiegarlo un po '. - Sembra che dovresti leggere una primavera 3.0 !!! o 3.1 tutorial. – Ralph