PROGRAMACIÓN ORIENTADA A ASPECTOS CON SPRING BOOT - PARTE III

AOP de Spring

A continuación, se describen una serie de puntos claves del Framework de trabajo AOP de Spring:

1.- Todos los consejos que se crean en Spring se escriben en una clase estándar de Java. Los puntos de corte que definen dónde se aplica el consejo pueden especificarse con anotaciones o en XML en el archivo de configuración de Spring.

2.- Spring aconseja los objetos en tiempo de ejecución.

3.- Los aspectos de Spring se implementan como proxy que empaquetan el objeto de destino. El proxy gestiona las invocaciones de métodos, aplica lógica de aspectos adicional y, después, invoca el método de destino.

4.- Spring solo admite puntos de cruce de método. Es una diferencia con respecto a otros Framework de trabajo AOP, que proporcionan puntos de cruce de constructor y de campo además de los de método.

Definir puntos de corte

En la siguiente lista se indican los diferentes designadores que se pueden usar en AOP de Spring para definir puntos de corte:

args()

Limita las coincidencias del punto de cruce a la ejecución de aquellos métodos cuyos argumentos son instancias de los tipos dados.

@args()

Limita las coincidencias del punto de cruce a la ejecución de aquellos métodos cuyos argumentos sed anotan con los tipos de anotación proporcionados.

execution()

Hacer coincidir los puntos de cruce que son ejecuciones de métodos.

this()

Limita las coincidencias de puntos de cruce a aquellas en las que la referencia de bean del proxy AOP es de un tipo determinado.

@target()

Limita las coincidencias de puntos de cruce cuando la clase de un objeto en ejecución cuenta con una anotación del tipo dado.

within()

Limita la coincidencia a los puntos de cruce de ciertos tipos.

@within

Limita la coincidencia a los puntos de cruce dentro de ciertos tipos que cuenten con la anotación dada.

@annotation

Limita las coincidencias de puntos de cruce a aquellos en los que el asunto del punto de cruce cuenta con la anotación dada.

DEFINIR UN ASPECTO

Para definir un aspecto se debe declarar una clase y anotarla con @Aspect. Dentro de la clase, los métodos se anotan con anotaciones de consejo para indicar cuándo deben invocarse.

A continuación, se indican las diferentes anotaciones para definir aspectos:

@After

El método de consejo se invoca después de que el método aconsejado devuelva o genere una excepción.

@AfterReturning

El método de consejo se invoca después de que el método aconsejado devuelva un resultado.

@AfterThrowing

El método de consejo se invoca después de que el método aconsejado genere una excepción.

@Around

El método de consejo encapsula al método aconsejado.

@Before

El método de consejo se invoca antes de ejecutarse el método aconsejado

Ejemplo

Para ilustrar el uso de aspectos en Spring, se necesita un elemento que sea el sujeto de los puntos de corte del aspecto.

Para ello, se va a definir la clase Estudiante:

package com.sergio.memoria;

public class Estudiante {

    public void realizarExamen() {

        System.out.println(“Realizar examen.”);

    }

}

Por otro lado, se va a definir la clase PadreEstudiante como aspecto que se aplica al estudiante.

package com.sergio.memoria;

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.AfterThrowing;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

@Aspect

public class PadreEstudiante {

    @Before(“execution(* com.sergio.memoria.Estudiante.realizarExamen(..))”)

    public void apuntarAcademia() {

        System.out.println(“Apuntar al hijo a una academia que lo prepare.”);

    }

    @AfterReturning(“execution(*           com.sergio.memoria.Estudiante.realizarExamen(..))””)

public void falicitarHijo() {

    Sysment.out.println(“Felicitar al hijo por la calificación obtenida.”);

}

@AfterThrowing(“execution(* com.sergio.memoria.Estudiante.realizarExamen(..))”)

public void pedirHijoMayorEsfuerzo() {

    System.out.println(“Pedir al hijo mayor esfuerzo para el siguiente examen.”);

}

}

PadreEstudiante dispone de tres métodos que describen acciones que los padres de un estudiante pueden realizar a la hora de que sus hijos hagan un examen.

Antes del examen, el padre apunta al hijo a una academia que lo prepare para el mismo. Si en el examen se consigue una buena calificación, el padre al hijo por su resultado. Pero si no es así, el padre le debe pedir al hijo que se esfuerce más en el siguiente examen.

No hay comentarios:

Publicar un comentario

Contenido desarrollo de software - Arquitectura Software

ENUM en JAVA