java AOP 之 AspectJ

本文详细介绍了AOP中的切点(pointcut)概念及其语法,并解释了五种不同的通知(Advice)类型:前置通知、后置通知、后置返回通知、异常通知和环绕通知。通过具体的语法示例展示了如何在代码中实现这些通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 切点语法(pointcut)
方法执行:execution(MethodSignature)
办法调用:call(MethodSignature)
结构器施行:execution(ConstructorSignature)
构制器挪用:call(ConstructorSignature)
类始初化:staticinitialization(TypeSignature)
属性读操作:get(FieldSignature)
属性写操纵:set(FieldSignature)
破例处置施行:handler(TypeSignature)
工具始初化:initialization(ConstructorSignature)
工具事后始初化:preinitialization(ConstructorSignature)
Advice执行:adviceexecution()
pointcut 方法名称([参数]) : call|execution|staticinitialization(* 匹配到方法([参数类型]));
pointcut test(String name) : call(* com.uwo.test.HelloWord.hello(String));
  • 五种通知(曾强)
before 目标方法执行前执行,前置通知
after 目标方法执行后执行,后置通知
after returning 目标方法返回时执行 ,后置返回通知
after throwing 目标方法抛出异常时执行 异常通知
around 在目标函数执行中执行,可控制目标函数是否执行,环绕通知
  • 前置通知语法
before([参数]) : 切点方法名称([参数]) {
    /// 处理过程
}
before(String name) : test(name) {
    System.out.println("before " + name);
}
  • 后置返回通知语法
after([参数]) returning ([返回值]) : 切点方法名称([参数]) {
    /// 处理过程
}
after(String name) returning (String value) : test(name) {
    System.out.println("after returning paramName = " + name + "; resultValue = " + value);
}
  • 异常通知语法
after([参数]) throwing (异常类) : 切点方法名称([参数]) {
    /// 处理过程
}
after(String name) throwing (java.lang.Exception e) : test(name) {
    System.out.println("after throwing paramName = " + name + "; Exception = " + e.getMessage());
}
  • 后置通知语法
after([参数]) : 切点方法名称([参数]) {
    /// 处理过程
}
after(String name) : test(name) {
    System.out.println("after " + name);
}
  • 环绕通知语法 around 无法与 (before,after)同时存在
返回类型 around([参数]) : 切点方法名称([参数]) {
    /// 处理过程
    return 值;
}
String around(String name) : test(name) {
    System.out.println("[around === start]");
    String value = proceed(name);
    System.out.println("[around === end]");
    return value;
}

转载于:https://my.oschina.net/yan5845hao/blog/898129

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值