AspectJ中JoinPoint和ProceedingJoinPoint注解的使用
概念
Joint Point
JointPoint是程序运行过程中可识别的点,这个点可以用来作为AOP切入点。JointPoint对象则包含了和切入相关的很多信息。比如切入点的对象,方法,属性等。我们可以通过反射的方式获取这些点的状态和信息,用于追踪tracing和记录logging应用信息。
Pointcut
pointcut 是一种程序结构和规则,它用于选取join point并收集这些point的上下文信息。
pointcut通常包含了一系列的Joint Point,我们可以通过pointcut来同时操作jointpoint。单从概念上,可以把Pointcut当做jointpoint的集合。
JointPoint和ProceedingJoinPoint区别
JoinPoint
joinpoint的方法如下
# 返回目标对象,即被代理的对象
Object getTarget();# 返回切入点的参数
Object[] getArgs();# 返回切入点的Signature
Signature getSignature();# 返回切入的类型,比如method-call,field-get等等,不重要String getKind();
ProceedingJoinPoint
Proceedingjoinpoint 继承了 JoinPoint。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。
public interface ProceedingJoinPoint extends JoinPoint {void set$AroundClosure(AroundClosure var1);default void stack$AroundClosure(AroundClosure arc) {throw new UnsupportedOperationException();}Object proceed() throws Throwable;Object proceed(Object[] var1) throws Throwable;
}
ProceedingJoinPoint只能用在around(环绕通知)中
环绕通知=前置+目标方法执行+后置通知,proceed方法就是用于启动目标方法执行的
joinPoint使用方法如下
//1.获取切入点所在的目标对象Object obj = joinPoint.getTarget(); //2.获取修饰符+ 包名+组件名(类名) +方法名Signature signature = joinPoint.getSignature();//3.获取方法上的注解MethodSignature methodSignature = (MethodSignature) signature;Method method = methodSignature.getMethod();if (method != null){xxxxxx annoObj= method.getAnnotation(xxxxxx.class);}return null;//4.获取切入点方法上的参数列表Object[] args = joinPoint.getArgs();
使用案例,环绕通知
1.定义一个注解 模拟记录日志
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomLog {String title() default "";
}
2.定一个切面
@Aspect
@Component
@Slf4j
public class CustomAspect {/*** 定义切入点*/@Pointcut("@annotation(io.renren.common.annotation.CustomLog)")public void CusjoinPoint() {}/*** 环绕通知* @param joinPoint* @return* @throws Throwable*/@Around("CusjoinPoint()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {Object proceed = joinPoint.proceed();log(joinPoint);return proceed;}/*** 简单打印日志--* @param joinPoint*/private void log(ProceedingJoinPoint joinPoint) {Signature signature = joinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;Method method = methodSignature.getMethod();String methodName = method.getName();CustomLog customLog = method.getDeclaredAnnotation(CustomLog.class);String title = customLog.title();log.info("methodName =>{},title=>>>>{}",methodName,title);}
}
3.把注解打到接口上面,然后调用该接口可以看到打印的日志
AspectJ中JoinPoint和ProceedingJoinPoint注解的使用相关推荐
- AspectJ 切面注解中五种通知注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around
要在 Spring 中声明 AspectJ 切面, 只需要在 IOC 容器中将切面声明为 Bean 实例. 当在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC ...
- AspectJ中的JoinPoint方法概要
AspectJ中的切入点匹配的执行点称作连接的(Join Point),在通知方法中可以声明一个JoinPoint类型的参数.通过JoinPoint可以访问连接点的细节.下面简要介绍JponPoint ...
- AspectJ中的org.aspectj.lang.JoinPoint接口的主要方法及使用
AspectJ 使用 org.aspectj.lang.JoinPoint 接口表示目标类连接点对象,如果是环绕增强,则使用 org.aspectj.lang.ProceedingJoinPoint ...
- @AspectJ中的几种通知方式详解
本文来详细说下@AspectJ中的几种通知方式 文章目录 概述 通知方式说明 一个例子 本文小结 概述 当Spring 2.0发布以后,Spring AOP增加了新的使用方式,Spring AOP集成 ...
- SpringAOP——JoinPoint 和 ProceedingJoinPoint
AOP 的几个概念 名称 解释 Pointcut 切点,决定处理如权限校验.日志记录等在何处切入业务代码中(即织入切面).切点分为execution方式和annotation方式.前者可以用路径表达式 ...
- SpringBoot AOP中JoinPoint的用法和通知切点表达式
前言 上一篇文章讲解了springboot aop 初步完整的使用和整合 这一篇讲解他的接口方法和类 JoinPoint和ProceedingJoinPoint对象 JoinPoint对象封装了Spr ...
- JoinPoint和ProceedingJoinPoint区别
本文主要介绍JoinPoint的常用方法 原文链接:JoinPoint和ProceedingJoinPoint有啥不一样? 在以一个实际例子演示如何使用注解实现AOP装配时,为了监控应用程序的性能,我 ...
- Spring中的一些常用注解
目录 1. @Autowired 2. @Qualifier 3. @Resource 4. @Component 5. @Value 6. @Bean 7. 声明bean的几个注解 7.1 @Ser ...
- NoClassDefFoundError: org/aspectj/lang/JoinPoint
NoClassDefFoundError: org/aspectj/lang/JoinPoint 控制台输出: org.springframework.beans.factory.BeanCreati ...
最新文章
- USB学习笔记连载(八):FX2替换到FX2LP需要注意事项
- ZooKeeper实战(三):ZooKeeper实现分布式配置中心、分布式锁、Reactive响应式模型
- java串口发送16进制数据_MFC串口通信发送16进制数据的方法
- python运行结果闪退_Pyhton TestCase运行闪退与失败,原因不详。。。
- 用成交量判断股价走势是否正常
- Haproxy负载均衡详解,与keepalived的搭配
- dynamic image
- a标签增加onclick事件提示未定义function
- Win11系统pin码忘记了怎么办?Win11忘记pin码解决方法
- Win10开启卓越性能模式
- java io 操作实例
- 住城中村的散装女主播
- linkerd 本地环境安装
- html5加载更多,HTML5[7]: 实现网页版的加载更多
- 关于qq邮箱 该文件已达到200次的下载限制,您已不能下载该文件 的问题处理
- 向数据库中批量插入数据的sql 语句
- 记录一些最近用过的编码转换
- java I/O流:字节流和字符流(概要及其方法)
- javascript全国省市级连
- PowerPMAC技术培训------5、虚拟电机配置