当前位置: 首页 > news >正文

通知可以根据切入点表达式来进行增强,也可以根据自己的注解值来进行增强

通知可以根据切入点表达式来进行增强,也可以根据自己的注解值(例如 @Before@After@Around 等)来进行增强。

如果要根据切入点表达式来进行增强,需要在通知注解中使用 @Pointcut 注解来引用切入点表达式。例如,在以下示例中,我们使用 @Before@After 注解来分别在方法执行前和执行后增强 SomeService 类中的 doSomething 方法:

@Aspect
@Component
public class SomeAspect {@Pointcut("execution(* com.example.demo.service.SomeService.doSomething(..))")public void doSomethingPointcut() {}@Before("doSomethingPointcut()")public void beforeDoSomething() {System.out.println("before doSomething");}@After("doSomethingPointcut()")public void afterDoSomething() {System.out.println("after doSomething");}
}

如果要根据自己的注解值来进行增强,则可以直接在通知注解中指定增强的类型。例如,在以下示例中,我们使用 @MyLog 注解来标记需要记录日志的方法,在 @MyLog 注解的 value 属性中指定日志类型,然后使用 @Around 注解来拦截该方法并记录日志:

@Aspect
@Component
public class LoggingAspect {@Around("@annotation(com.example.demo.annotation.MyLog)")public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable {String methodName = joinPoint.getSignature().getName();String logType = ((MyLog) joinPoint.getTarget().getClass().getMethod(methodName, Arrays.stream(joinPoint.getArgs()).map(Object::getClass).toArray(Class[]::new)).getAnnotation(MyLog.class)).value();System.out.println("start " + logType + " log");Object result = joinPoint.proceed();System.out.println("end " + logType + " log");return result;}
}

在这个示例中,我们定义了一个 @MyLog 注解,用于标记需要记录日志的方法。@MyLog 注解有一个 value 属性,用于指定日志类型。然后,在 LoggingAspect 类中,我们使用 @Around 注解来拦截标记了 @MyLog 注解的方法,并根据 @MyLog 注解中指定的日志类型来记录日志。

http://www.lryc.cn/news/70165.html

相关文章:

  • <Python实际应用>做一个简单的签到投屏系统
  • 时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测
  • Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C++)
  • BERT输入以及权重矩阵形状解析
  • 3 个令人惊艳的 ChatGPT 项目,开源了!
  • 一、12.C++内存管理
  • ensp实践dhcp服务
  • 【王道·计算机网络】第六章 应用层
  • 【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?
  • 工程师是怎样对待开源
  • Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践
  • 【06】Nginx之反向代理
  • TCP是面向字节流的协议
  • 读书笔记——《when breath becomes air》《超越自卑》
  • CMD与DOS脚本编程【第二章】
  • 面试字节,过关斩将直接干到 3 面,结果被吊打了?
  • OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码)
  • 5月跳槽会有风险,不跳也会有?
  • 【小白版】最简单的 goland package 教程包括自定义包的使用
  • IMX6ULL的I2C驱动详细分析
  • 日志迁移到 logback
  • 开源字节 CRM 系统
  • 七、Spring Cloud Alibaba-Sentinel
  • 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化
  • 【MySQL】MySQL基础知识详解
  • RabbitMQ日常使用小结
  • ​​​​​​​博物馆文物馆藏环境空气质量无线监控系统方案
  • 测试理论----Bug的严重程度(Severity)和优先级(Priority)的分类
  • 斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名
  • 00后卷王,把我们这些老油条卷的辞职信都写好了........