Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Crosscutting concern: definire gli advice

Le azioni che l'applicazione dovrà compiere a fronte di un avviso
Le azioni che l'applicazione dovrà compiere a fronte di un avviso
Link copiato negli appunti

Iniziamo con la definizione dell'advice incaricato di gestire il logging dell'attimo precedente l'invocazine di un metodo.

public class LogBeforeAdvice implements MethodBeforeAdvice {
  public void before(Method method, Object[] args, Object target) throws Throwable {
    // Log prima dell'invocazione del metodo
    System.out.println("[" + new Date() + "]nt"
                       +  target.getClass() + "."  +  method.getName()
                       +  "ntArgomenti: "+ Arrays.toString(args));
  }
}

La prima cosa che salta all'occhio è la semplicità con cui è stato realizzato l'advice: è bastato semplicemente far implementare ad una classe l'interfaccia MethodBeforeAdvice e inserire nel metodo before la logica di logging.

Il metodo before fornisce inoltre una serie di parametri utili che vanno dal riferimento all'oggetto target sul quale l'advice opera, al metodo invocato e ai suoi parametri di lancio.

Le cose non cambiano con gli altri tipi di advice come possiamo vedere nei prossimi snippet di codice.

public class LogAfterReturningAdvice implements AfterReturningAdvice {
  // Log del risultato dell'invocazione del metodo
  public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
    System.out.println("tRisultato: "+ returnValue);
  }
}

In questo caso abbiamo definito il comportamento del logger, a seguito di un invocazione di un metodo. L'unica differenza con quanto visto in precedenza, oltre al nome dell'interfaccia da implementare che qui è AfterReturningAdvice, è rappresentata dai parametri del metodo afterReturning tra i quali troviamo anche il valore di ritorno.

Per completare il logger manca semplicemente la gestione delle eventuali eccezioni che si possono verificare durante l'esecuzione dei metodi, che è possibile fare attraverso l'utilizzo dell'interfaccia ThrowsAdvice.

public class LogThrowAdvice implements ThrowsAdvice {
  // Log dell'eccezione ritornata dal metodo
  public void afterThrowing(Exception e) throws Throwable {
    System.out.println("tErrore: " + e.getMessage());
  }
}

Ti consigliamo anche