Spring AOP - expresión de ejecución
Ejemplo de expresión
ejecución(* com.sample.service.impl.. . (..))
Detalles:
ejecución(), el cuerpo de la expresión
El primer símbolo " " indica que el tipo de valor de retorno es arbitrario;
com.sample.service.impl, el servicio cubierto por AOP El nombre del paquete es nuestra parte comercial
El ".." después del nombre del paquete representa el paquete y los subpaquetes actuales
El segundo " " representa el nombre de la clase, es decir, all Class
(..), representa cualquier nombre de método, los corchetes representan parámetros y dos puntos representan cualquier tipo de parámetro
formato de sintaxis de expresión de ejecución
ejecución. (lt;Patrón modificadorgt;?lt;Patrón de tipo de retornogt;lt;Patrón de nombre de métodogt;(lt;Patrón de parámetrogt;)lt;Patrón de excepcióngt;?)
Además del patrón de tipo de retorno, el nombre del método Modo y modo de parámetro, otros elementos son opcionales.
Introducción de ejemplo
Definir puntos de acceso mediante nombres de métodos
ejecución (público * *(..))
Coincidir con todas las clases de destino públicas método, el primero representa el tipo de valor de retorno del método, el segundo representa el nombre del método y ".." representa cualquier método que toma parámetros
ejecución(* To(..)) p>
coincide con todos los métodos de la clase de destino con To como sufijo. El primer " " representa cualquier tipo de retorno de método y "*To" representa cualquier nombre de método que termine en To.
Definir puntos de acceso mediante clases
ejecución(* com.taotao.Waiter.*(..))
Hacer coincidir todos los métodos de la interfaz Waiter, primero Cada uno "" representa cualquier tipo de devolución y "com.taotao.Waiter" representa todos los métodos en la interfaz de Waiter.
ejecución(* com.taotao.Waiter .*(..))
Coincide con los métodos de la interfaz Waiter y todas sus clases de implementación
Definido mediante el nombre del paquete Pointcut
Nota: En la cadena del patrón del nombre del paquete, "." representa todas las clases del paquete y "..**" representa todas las clases del paquete y los paquetes descendientes.
ejecución(* com.taotao.*(..))
Coincide con todos los métodos de todas las clases bajo el paquete com.taotao
ejecución(* com . taotao..*(..))
Coincide con todos los métodos de todas las clases del paquete com.taotao y sus paquetes descendientes, como com.taotao.user.dao, com.taotao.user. servicio y otros paquetes Todos los métodos de todas las clases bajo.
ejecución(* com.. . Dao.find*(..))
Haga coincidir cualquier clase con el sufijo Dao bajo cualquier nombre de paquete que comience con com y el nombre del método termine con find es el prefijo, métodos como com.taotao.UserDao#findByUserId() y com.taotao.dao.ForumDao#findById() todos coinciden con los puntos de corte.
Defina puntos de corte mediante parámetros de método
La parte del parámetro de método de la expresión de punto de corte es más complicada. Puede usar comodines "" y "..", donde "" representa cualquier tipo de parámetro. y ".." indica cualquier tipo de parámetros y el número de parámetros no está limitado.
ejecución(* joke(String, int))
Coincide con el método joke() en la clase, y el primer parámetro de entrada es tipo String y el segundo parámetro de entrada es int . Tipo
ejecución(* joke(String, ..))
Coincide con el método joke() en la clase de destino. El primer parámetro de este método es String, y puede haberlo. ser cualquier número de parámetros posteriores de cualquier tipo
Expresiones de punto de corte comunes
Firmas de métodos coincidentes
// Coincide con todos los métodos en el paquete especificado
ejecución(* com.xys.service.*(..))
// Coincide con todos los métodos públicos en el paquete actual
ejecución(public * UserService.* (. .))
// Coincide con todos los métodos públicos en el paquete especificado y el valor de retorno es de tipo int
ejecución(public int com.xys.service.*(. ))
// Coincide con todos los métodos públicos en el paquete especificado, y el primer parámetro es String y el valor de retorno es un método de tipo int
ejecución (public int com. xys. service.*(String name, ..))
Firma de tipo coincidente
// Coincide con todos los métodos en el paquete especificado, pero no incluye subpaquetes
inside(com.xys.service.*)
// Coincide con todos los métodos en el paquete especificado, incluidos los subpaquetes
inside(com.xys.service. .*) p>
// Métodos de coincidencia en la clase especificada en el paquete actual
inside(UserService)
// Métodos de coincidencia implementados en todas las clases de implementación de una interfaz
dentro de(UserDao)
Coincidir con el nombre del Bean
// Coincidir con todos los métodos en los beans que terminan con el nombre especificado
bean ( Servicio )
Combinación de expresión de punto de corte
// Coincidencia de beans que terminan en Servicio o ServiceImpl
bean( Servicio || *ServiceImpl)
// Coincide con el Bean cuyo nombre termina en Servicio y está en el paquete com.xys.service
bean(Service) amp;amp inside(com.xys.service.)