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

Around advice e MethodInterceptor

Prendere il pieno possesso dell'esecuzione di un metodo
Prendere il pieno possesso dell'esecuzione di un metodo
Link copiato negli appunti

Fino ad ora abbiamo visto come, attraverso l'utilizzo di appositi advice, sia possibile eseguire azioni negli attimi che precedono e seguono l'invocazione di un metodo. Spring AOP permette di spingersi oltre mettendo a disposizione un around advice: implementando l'interfaccia MethodInterceptor è possibile acquisire il pieno controllo dell'invocazione di un metodo, inclusa la sua esecuzione.

Grazie all'utilizzo di questo advice è possibile non solo combinare tutti i comportamenti visti in precedenza, ma anche determinare se un metodo debba essere eseguito o meno.

public class LogAroundAdvice implements MethodInterceptor {
  public Object invoke(MethodInvocation methodInvocation) throws Throwable {
    // Log prima dell'invocazione del metodo
    System.out.println("[" + new Date() + "]nt"
        +  methodInvocation.getClass() + "."  +  methodInvocation.getMethod().getName()
        +  "ntArgomenti: "+ Arrays.toString(methodInvocation.getArguments()));
    Object result = null;
    try {
			// invocazione metodo
			result = methodInvocation.proceed();
		}
		catch (Exception ex) {
			// Log dell'eccezione ritornata dal metodo
			System.out.println("tErrore: " + ex.getMessage());
		}
		// Log del riusultato dell'invocazione del metodo
		System.out.println("tRisultato: "+ result);
		return result;
	}
}

Anche in questo caso il modo di operare non cambia. Una volta implementata l'interfaccia MethodInterceptor sarà possibile specificare la logica da eseguire direttamente in invoke().

A supporto di questa operazione abbiamo il parametro MethodInvocation con il quale, oltre ad ottenere le informazioni legate all'esecuzione del metodo richiamato sul target object, è possibile specificarne il momento dell'invocazione (operazione obbligatoria se si vuole che il metodo sia effettivamente invocato).


Ti consigliamo anche