La Red de Conocimientos Pedagógicos - Currículum vitae - Spring AOP - expresión de ejecución

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(..))

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. .*)

// 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.)