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

Spring AOP

Il componente del framework Spring dedicato all'implementazione dell'AOP nei nostri progetti
Il componente del framework Spring dedicato all'implementazione dell'AOP nei nostri progetti
Link copiato negli appunti

Presente fin dalla prima versione del framework, l'Aspect Oriented Programming rappresenta, insieme all'Inversion of Control, una delle caratteristiche principali alle quali Spring deve la sua popolarità. Il suo supporto è garantito da Spring AOP, un modulo nativo del framework che nasce con lo scopo di fornire una completa integrazione con il container di IoC. Grazie a questa caratteristica, Spring AOP pur non essendo una delle soluzioni più complete sul mercato risulta essere estremamente flessibile e versatile.

A partire dalla versione 2.x Spring AOP è stato esteso con il supporto alle annotation AspectJ (@AspectJ), portando di fatto un forte cambiamento nel modo di concepire AOP in Spring. Nelle prossime lezioni avremo modo di parlare dell'integrazione con @AspectJ e dei vantaggi offerti sia sotto il profilo della modellazione dei crosscutting concern, sia dal punto di vista dell'apertura verso framework AOP di terze parti.

Per il momento concentriamoci invece sull'approccio classico di Spring AOP, il cui supporto è pienamente garantito anche nelle nuove versioni del framework.

Riprendiamo l'esempio utilizzato nelle lezioni sull'accesso ai dati tramite JDBC e proviamo ad aggiungere la funzionalità di logging alle invocazioni dei metodi coinvolti nelle operazioni di persistenza. Il punto di partenza è ovviamente l'interfaccia BookDao dove tali operazioni vengono definite.

public interface BookDao {
  public void insert(Book book);
  public void update(Book book);
  public void delete(String isbn);
  public Book findByISBN(String isbn);
  public List<Book> findAllBooks();
  public int bookCount();
}

Gli advice di Spring AOP

Come abbiamo detto nella precedente lezione, le operazioni da compiere da parte di un crosscutting concern sono incapsulate in advice, eseguiti al verificarsi di determinati JointPoint (in Spring gli unici JointPoint intercettabili sono quelli legati all'esecuzione di metodi).

In Spring modellare un advice è abbastanza semplice e si riduce all'implementazione di apposite interfacce con le quali definire le azioni da intraprendere.

Ecco una tabella con gli advice messi a disposizione da Spring AOP.

Tipo di Advice Momento dell'esecuzione Interfaccia
BeforeAdvice prima dell'esecuzione di un metodo. MethodBeforeAdvice
AfterReturning dopo il ritorno di un risultato da parte di un metodo. AfterReturningAdvice
AfterThrowing in seguito al rilancio di un eccezione da parte di un metodo. ThrowsAdvice
AroundAdvice costruito intorno l'esecuzione di un metodo. MethodInterceptor

L'implementazione del concern di logging che ci siamo prefissati passa proprio per la definizione di appositi advice da associare alla classe che implementa l'interfaccia BookDao.

Come avremo modo di vedere, la flessibilità di AOP sta nel fatto che gli advice sono svincolati dalle specifiche implementazioni degli oggetti target sui quale opererano e di fatto quello che costruiremo sarà un logger generico e riutilizzabile.

Ti consigliamo anche