2010-01-15 9 views
28

Sto leggendo su Spring al momento e uno degli esempi utilizzati per un utilizzo di AOP sta registrando l'inizio e la fine delle chiamate di metodo.L'utilizzo di Spring AOP per la registrazione è una buona idea?

Ho anche letto che l'utilizzo di AOP può influire sulle prestazioni.

L'utilizzo di Spring AOP è una buona idea per questo tipo di registrazione? La mia comprensione è che Spring utilizza Dynamic AOP sarebbe meglio utilizzare Static AOP (Like AspectJ) per questo tipo di AOP.

Curante la politica di codifica dell'azienda per cui lavoro richiede una quantità riduttiva di registrazione e voglio ridurre la quantità di codice di registrazione che devo scrivere e migliorare la leggibilità del mio codice.

Sto abbaiando dall'albero sbagliato?

risposta

13

Leggi this blog-post sui tuoi problemi di rendimento.

Il modo di pensare a AOP consiste nel mettere i benefici funzionali forniti in primo luogo. Se la registrazione automatica è il tuo requisito e AOP lo soddisfa, fallo.

Ciò detto, la tessitura del tempo di caricamento è, naturalmente, preferibile se è richiesta una registrazione a grana fine.

32

ho usato Spring AOP per l'attuazione di registrazione in modo da condividere le mie osservazioni:

  • Impatto sulle prestazioni non è sufficiente, è meno di impatto della registrazione stessa
  • Avendo aspetti configurati in configurazione primavera, si è in grado per disabilitare completamente il codice di registrazione, se necessario
  • Il debug diventa più problematico in quanto le tracce di stack diventano piuttosto lunghe
  • Tale decisione influisce in modo sufficiente sulla progettazione. Non è solo che ottieni un sacco di interfacce e classi di aspetto, ma le classi di produzione devono essere molto "sottili". Non dimenticare, non è possibile intercettare le chiamate a metodi non pubblici. Anche le chiamate automatiche (anche ai metodi pubblici) non possono essere intercettate (dato che si sta lavorando con handle n. this invece di handle wrapped da AOP) e quindi non può essere registrato. Pertanto, la registrazione può avvenire solo sui limiti dell'interfaccia. (Questo riguarda l'utilizzo della tessitura basata su Proxy, c'è una possibilità di sottoclassi di runtime con cglib, ma non l'ho usato)
  • La scrittura di punti può essere molto complicata. IntelliJ Idea aiuta a determinare in modo determinante quali metodi devono essere consigliati da un collegamento di punti.
  • In generale, mi è piaciuto questo approccio e che valga la pena di utilizzare, ma sembrava molto più complicato di quanto mi aspettassi
3

ho fatto in modo simile al modo descritto nel this blog post. È il migliore che ho trovato e ha anche un sample che mostra bene la differenza tra l'utilizzo e il non utilizzo di AOP.

Imho non ne vale la pena, a meno che non si stia facendo qualcosa di più interessante della registrazione, come la gestione degli errori con persistenza. Se si dispone di una buona gerarchia di eccezioni (dominio, sistema) e correttamente impostati i limiti di registrazione, non si riduce molto il codice di registrazione.

+0

Il collegamento è al sito blog e non al blog effettivo per l'argomento in questione –

Problemi correlati