2012-10-20 17 views
6

utilizzando proxy CGLIB in primavera provoca:evitando problemi con delega molla cglib

a) doppia invocazione del costruttore

b) non permettono di intercettare un metodo richiamato da un altro metodo

ma perché molla crea un fagiolo e poi un proxy? è possibile generare dinamicamente una classe che estende una classe bean specificata e quindi invoca il costruttore una sola volta? ciò risolverebbe a) eb) per metodi pubblici e protetti. mi sto perdendo qualcosa?

risposta

4

Buona domanda. Penso che sia dovuto al modo in cui Spring avvia il contesto dell'applicazione: crea prima tutti i bean non elaborati e quindi applica i post processori, ad es. aggiunta di AOP (comprese le transazioni). Questa architettura a più livelli richiede innanzitutto la creazione di bean normali e il loro successivo wrapping. Si potrebbe obiettare che questo approccio segue il principio sull'ereditarietà.

Si noti inoltre che a) non dovrebbe essere un problema. La classe non dovrebbe eseguire l'inizializzazione nel costruttore ma nel metodo @PostConstruct, che viene richiamato una sola volta. D'altra parte questo porta a un altro problema:

c) non si può utilizzare l'iniezione costruttore con deleghe CGLIB, vedere SPR-3150

Ma capisco la tua frustrazione. Indovina l'unica soluzione valida per noi è la tessitura completa di AspectJ.