Expresiones @PointCut

Continuando con el tema AOP,  en esta entrada vamos a profundizar en la definición de expresiones más potentes para los @Pointcut, además revisaremos el uso de comodines( *, .., +). Recordemos la sintaxis vista en introducción AOP:

El texto resaltado con rojo, es obligatorio en la expresión

Comodines

  • (*) : sustituye a elementos de la expresión.
  • (..) : sustituye varios tokes, por ejemplo varios argumentos de un método o varios subpaquetes con el mismo prefijo

Ejemplos

  • Ejecución de cualquier método llamado insertar: que sea público, sin retorno(void) y sin parametros ().
    @Pointcut("execution(public void insertar())")
     public void pointAccion(){} 
          

  • Ejecución de cualquier método que empiece con buscar*: con (*) ,indicamos cualquier texto despúes del texto buscar, por ejemplo: buscarCliente, buscarEmpleado.
    @Pointcut("execution( void buscar*())")
     public void pointBuscar(){} 
          

  • Ejecución de cualquier método validarLogin*: con el primer (*) indicamos que puede tener retorno(cualquier tipo) o no, con el segundo (*) indicamos cualquier texto despúes de validarLogin, además con (..) indicamos que puede tener cero o varios parámetros.
    @Pointcut("execution(public * validarLogin*(..))")
     public void pointValidarLogin(){} 
          

Especificar parámetros de tipo compuesto o primitivos

Para especificar un tipo de dato de retorno o párametro en una expresion @Pointcut, debe tener en cuenta lo siguiente:

  • Si el tipo de retorno o parametro es tipo primitivo (int, boolean, ..) o pertenece al paquete por defecto de java (java.lang) puede especificar el tipo directamente en el @Pointcut.

  • Si el tipo de retorno o parámetro es tipo compuesto(clases propias o de java) y no estan en el paquete java.lang, por ejemplo: List, Scanner, Date, entre miles más, debe especificar el paquete completo de la clase.

Ejemplos expresiones valores primitivos

  • Ejecución de cualquier método llamado loginCliente: que sea público, sin retorno(void) y que reciba un parametro String.
    @Pointcut("execution(public void loginCliente(String))")
     public void pointCliente(){} 
          

    El tipo String no es un valor primitivo, sin embargo, String pertenece al paquete java.lang

  • Ejecución de cualquier método llamado validEstado*: que tenga un retorno tipo int, además, que tenga el texto validEstado mas cualquier texto(*) y que reciba un primer parámetro entero, seguido de un booleano y despues cualquier parámetro.
    @Pointcut("execution(int validEstado*(int, boolean, ..))")
     public void pointEstado(){} 
          

Ejemplos expresiones valores compuesto

  • @Pointcut("execution(public x.y.service.Cliente loginCliente())")
     public void pointCliente(){} 
          

    Note como para el tipo de retorno se especifica el paquete completo para referenciar al tipo Cliente

  • @Pointcut("execution(* x.y.dao.EmpleadoDao.estado(x.y.Empleado, Strig, ..))")
     public void pointEstado(){} 
          

    Note como para el primer parámetro se especifica el paquete completo para referenciar al tipo Empleado

  • @Pointcut("execution( public java.util.List  x.y.*.clienteList(..))")
     public void pointList(){} 
          

    El comodin (*) indica cualquier clase dentro del paquete x.y que tenga un método clienteList(..)

  • @Pointcut("execution( public java.util.List<String>  x.y.*.clienteList(..))")
     public void pointList(){} 
          

    Podemos indicar el tipo de elemento de una lista: java.util.List<String> .

  • @Pointcut("execution( public java.util.List<x.y.Cliente>  x.y.*.clienteList(..))")
     public void pointList(){} 
          

¡Hasta pronto 👋👍!

Comentarios

Entradas populares de este blog

JWT (Json Web Token)

Instalar Java Developmet Kit(JDK)

Curso de Spring