Ho lavorato con una base di codice di una società che ha una politica di scrittura di molte registrazioni di traccia. Così praticamente ogni metodo ha un pezzo di codice che inizia così:Utilizzo di annotazioni per la registrazione di traccia
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
e alla fine come questo (o in un finally
-clause o solo alla fine del metodo:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
Ci è in realtà più codice, ma questa è l'idea di base Questo è il cluttering del codice e altri codificatori sono costantemente in disordine con le proprie interpretazioni che non utilizzano la specifica classe CompanyMessages
necessaria per formattare i messaggi in essere letto dagli strumenti di monitoraggio, quindi sto cercando un modo per sbarazzarsi di il codice precedente e forniamo tutti i metodi che richiedono la registrazione di traccia con annotazioni come: @LogBefore('logLevel')
@LogAfter('logLevel')
.
Il motivo per cui scelgo questa soluzione è di farlo in modo che gli altri sviluppatori non debbano imparare nulla di nuovo ma utilizzare le annotazioni anziché il codice. Sto lavorando in un ambiente server in cui distribuiamo centinaia di applicazioni Web e dozzine di sviluppatori. Quindi ho cercato un modo per implementarlo in un'applicazione web senza un sacco di codice aggiuntivo o librerie aggiuntive di grandi dimensioni. Ciò significa che sto cercando un'implementazione AOP piccola e stabile utilizzando annotazioni simili a quelle che ho proposto, facili da configurare in ogni applicazione web. Anche le prestazioni sono importanti. Qual è l'esempio più semplice per implementarlo con AOP?
Modifica: ho trovato something very similar per quello che sto cercando, ma questo ha un paio di problemi. Tutte le classi che richiedono la registrazione devono essere configurate, il che comporterebbe un dispendio di risorse maggiore rispetto all'uso delle annotazioni. La configurazione della molla <aop:aspectj-autoproxy/>
la risolverebbe?
Grazie, questo mi ha fatto capire che il mio punto di vista sul funzionamento delle annotazioni era difettoso. – mahler