Pointcut语法格式
args()
@args()
execution()
this()
target()
@target()
within()
@within()
@annotation
args()
()execution()
this()
target()
()within()
()
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
execution(修饰符? 返回值的类型 所属的类? 方法名(参数列表) 抛出的异常?)
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
execution(修饰符? 返回值的类型 所属的类? 方法名(参数列表) 抛出的异常?)
- modifiers-pattern:指定方法的修饰符,支持通配符,该部分可以省略
- ret-type-pattern:指定方法的返回值类型,支持通配符,可以使用 * 通配符来匹配所有的返回值类型
- declaring-type-pattern:指定方法所属的类,支持通配符,该部分可以省略
- name-pattern:指定匹配指定的方法名,支持通配符,可以使用 * 通配符来匹配所有方法,也可以用 set* 匹配以 set 开头的所有方法
- param-pattern:指定方法声明中的形参列表,支持两个通配符,即 * 和 .. ,其中 * 代表一个任意类型的参数,而 .. 代表零个或多个任意类型的参数。例如 :
() 匹配一个不接受任何参数的方法
(..) 匹配一个接受任意数量参数的方法
(*) 匹配了一个接受一个任何类型的参数的方法
(*,String) 匹配了一个接受两个参数的方法,其中第一个参数是任意类型,第二个参数必须是String类型 - throws-pattern:指定方法声明抛出的异常,支持通配符,该部分可以省略
通配符和操作符
案例1
类型签名样式
方法和构造器签名模式
public void Account.debit(float) throws InsufficientBalanceException
x
public void Account.debit(float) throws InsufficientBalanceException
public void Account.set*(*)
public void Account.set*(*)
public void Account.*()
public void Account.*()
public * Account.*()
public * Account.*()
public * Account.*(..)
public * Account.*(..)
* Account.*(..)
* Account.*(..)
!public * Account.*(..)
!public * Account.*(..)
* Account+.*(..)
* Account+.*(..)
* java.io.Reader.read(..)
* java.io.Reader.read(..)
* java.io.Reader.read(char[],..)
* java.io.Reader.read(char[],..)
* javax..*.add*Listener(EventListener+)
* javax..*.add*Listener(EventListener+)
* *.*(..) throws RemoteException
* *.*(..) throws RemoteException
构造器签名模式
没有参数的构造器方法
public Account.new()
public Account.new()
属性签名模式
* Account.*
* Account.*
!public static * banking..*.*
!public static * banking..*.*
案例2
execution(public * *(..))
execution(public * *(..))
execution(* set*(..))
execution(* set*(..))
com.xyz.service.
AccountService 中的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service..*.*(..))
execution(* com.xyz.service..*.*(..))
execution(* com.xyz.pointcutexp..JoinPointObjP2.*(..))")
execution(* com.xyz.pointcutexp..JoinPointObjP2.*(..))")
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101696.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...