2012-02-04 14 views
8

Es difícil explicar lo que realmente quiero. Tengo una interfaz que tiene un método getRuntimeInfo() que me proporciona toda la información de depuración de tiempo de ejecución para las variables de una clase. Quiero ver la lista de todas las clases que implementan esta interfaz. Estoy usando Java y Spring. Una forma en que puedo hacer esto es obtener todos los granos del contexto de primavera y verificar usando el operador instanceof. Pero no me gustaría hacer eso por obvio impacto en el rendimiento. ¿Tengo alguna otra opción?Mantenga un registro de todas las clases que implementan una interfaz en particular?

Respuesta

13

¿Qué pasa con esta solución:

@Component 
public class WithAllMyInterfaceImpls { 

    @Autowire 
    List<MyInterface> allBeansThatImplementTheMyInterface; 

} 

la lista sólo se rellena una vez (en el arranque) por lo que no debería tener un impacto significativo en el rendimiento "normal" en tiempo de ejecución.


Comentario:

puede explicar su código

Usted sabe que la primavera es un contenedor COI. @Component le dice a Spring que debe crear una instancia de esta clase (un llamado Spring Managed Bean). IOC significa también que el contenedor es responsable de inyectar referencias a otras instancias (Spring Managed Beans). @Autowire (así como @Resource y @Inject - todos hacen lo mismo) es una anotación que le dice a Spring que este campo debe ser poblado por Spring. La primavera misma intenta averiguar con qué instancias debe rellenarse el campo. Una técnica predeterminada que utiliza la primavera es by type, lo que significa que Spring inspecciona el tipo de campo y busca frijoles coincidentes. En su caso, es una lista genérica, esto es un poco especial. En este caso, Spring rellena el campo con una lista, donde los elementos son todos los beans que coinciden con el tipo genérico.

+0

Es solo la función normal de autovío de resortes, no hay nada especial. Es solo la función principal del resorte – Ralph

+0

@ user1117398: extendí mi respuesta para explicarlo un poco. - Parece que deberías leer un Spring 3.0 !!! o 3.1 tutorial. – Ralph

Cuestiones relacionadas