2012-02-04 9 views
8

È 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

13

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.

+0

È solo la normale funzione di autowiring della molla, non c'è niente di speciale. È solo la caratteristica di base della molla – Ralph

+0

@ user1117398: ho esteso la mia risposta per spiegarlo un po '. - Sembra che dovresti leggere una primavera 3.0 !!! o 3.1 tutorial. – Ralph

Problemi correlati