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:
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(){}
Comentarios
Publicar un comentario