2011-09-21 15 views
5

Possiedo una grande applicazione Spring 2.x con un paio di centinaia di file applicationContext.xml e diverse migliaia di fabbriche bean/bean.Come scoprire cosa fa esattamente la primavera autowire?

La maggior parte di queste configurazioni XML dice qualcosa come default-autowire="byName", attivando in modo efficace l'autowiring, ma solo una frazione di bean è effettivamente autorizzata. La maggior parte delle proprietà del bean sono impostate in modo esplicito.

(questo è quello di storici ragioni, credo che sia come tu lo chiami quando non eri abbastanza intelligente in passato.)

Ora vorremmo rimuovere autowiring a tutti. Crediamo che solo una piccola frazione di fagioli sia effettivamente autowired - ma non sappiamo, cosa ed eravamo esattamente. La mia domanda è:

Come possiamo scoprire cosa e sono stati esattamente autowired dalla primavera?

Idealmente, è necessario ottenere un elenco di bean/proprietà in modo da poterli inserire esplicitamente in configurazioni XML out. Ma prima di tuffarmi negli interni di Spring con un debugger, ho deciso di chiedere se qualcuno su SF ha forse già risolto un compito simile.

ps. Non ho intenzione di discutere se l'autowiring sia buono o cattivo. Abbiamo un numero di motivi tecnici interni per rimuovere l'autowiring, tutto qui.

risposta

7

È possibile provare a abilitare il registro DEBUG in primavera. Stampa molte informazioni durante la fase di inizializzazione. Scommetto che anche i messaggi di auto-cablaggio sono stampati. Hai solo bisogno di trovare quel messaggio e quindi analizzare il file di registro dopo che l'applicazione è stata completamente inizializzata.

UPDATE: Credo che AbstractAutowireCapableBeanFactory sia responsabile della logica di cablaggio automatico. È possibile verificare il metodo autowireByName. Produce il seguente messaggio di registro che è possibile cercare nel file di registro:

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

Grazie, ho trovato anche questa dichiarazione di registro. Ora ho rimosso ca. 20 autowirings nei nostri fagioli. – lexicore

1

La mia ipotesi sarebbe quella di abilitare un logger (log4j) per quel pacchetto (quello che fa autowire) in un file specifico.

Quello produrrebbe il nome di tutti i fagioli.

Problemi correlati