2011-09-21 14 views
5

Tengo una gran aplicación basada en Spring 2.x con un par de cientos de archivos applicationContext.xml y varios miles de beans/fábricas de frijoles.¿Cómo saber qué hace exactamente Spring autowire?

La mayoría de estas configuraciones XML dicen algo así como default-autowire="byName", activando efectivamente el autoenvío, pero solo una fracción de los beans está realmente autoconectada. La mayoría de las propiedades de los frijoles se establecen explícitamente.

(Esto es a históricos razones, supongo que así es como se llama cuando usted no era lo suficientemente inteligente como en el pasado.)

Ahora nos gustaría eliminar autowiring en absoluto. Creemos que solo una pequeña fracción de los frijoles está realmente autoconectada, pero no sabemos qué y exactamente. Mi pregunta es:

¿Cómo podemos saber qué fue y exactamente lo que Autowired es por Spring?

Idealmente, necesitamos obtener una lista de beans/propiedades para que podamos insertar esto explícitamente en las configuraciones XML. Pero antes de sumergirme en Spring internamente con un depurador, decidí preguntar si alguien en SF quizás ya había resuelto una tarea similar.

ps. No tengo la intención de discutir si el autoenvío es bueno o malo. Tenemos una serie de razones técnicas internas para eliminar el autoenvío, eso es todo.

Respuesta

7

Puede intentar habilitar el registro DEBUG en Spring. Imprime mucha información durante la fase de inicialización. Apuesto a que los mensajes de auto-cableado también se imprimen. Solo necesita encontrar ese mensaje y luego analizar el archivo de registro después de que la aplicación se haya inicializado por completo.

ACTUALIZACIÓN: Creo que AbstractAutowireCapableBeanFactory es responsable de la lógica de auto-cableado. Puede verificar el método autowireByName. Produce el siguiente mensaje de registro que puede buscar en el archivo de registro:

logger.debug("Added autowiring by name from bean name '" + beanName + 
    "' via property '" + propertyName + "' to bean named '" + propertyName + "'"); 
+1

Gracias, también he encontrado esta declaración de registro. Ahora he eliminado ca. 20 autowirings en nuestros frijoles. – lexicore

1

Supongo que habilitaría un registrador (log4j) para ese paquete (el que realiza el autoenvío) en un archivo específico.

Eso daría salida al nombre de todos los beans.

Cuestiones relacionadas