本文主要是介绍浅谈Spring中的JoinPoint MethodSignature Signature,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
浅谈Spring中的JoinPoint MethodSignature Signature
- JoinPoint
- ProceedingJoinPoint
- MethodSignature 切入点是一个方法
- Signature
AOP 中,切面可以通过 JoinPoint 对象获取到连接点的相关信息,其中包括方法签名信息。
- 通过 JoinPoint 对象的
getSignature()
方法获取到 Signature 对象。 - 如果连接点是一个方法,那么可以将 Signature 对象转换为 MethodSignature 对象,通过 MethodSignature 对象可以获取到更加详细的方法签名信息,比如方法返回类型、参数类型等。
JoinPoint
JointPoint是程序运行过程中可识别的点,这个点可以用来作为AOP切入点。
JointPoint对象则包含了和切入相关的很多信息。比如切入点的对象,方法,属性等。我们可以通过反射的方式获取这些点的状态和信息。
Spring AOP 中的 JoinPoint 接口继承了反射 API 中的 Member 接口,因此可以通过 JoinPoint 对象获取到方法 或构造函数的 Signature 对象。
ProceedingJoinPoint
ProceedingJoinPoint 是 JoinPoint 的子接口,专门用于环绕通知(@Around)。
多了一个proceed() 方法,proceed() 方法是环绕通知中的关键,它决定了是否继续执行原方法或者提前返回自定义结果
MethodSignature 切入点是一个方法
😒: 代码实现============>
✒️ 用MethodSignature的方法签名对象,可以获取方法的详细信息,例如方法名、参数列表等,以便进行切面的逻辑处理。
getName() 方法用于获取方法名
getReturnType() 方法用于获取方法返回类型
getParameterTypes() 方法用于获取方法参数类型列表等
📘代码
@Aspect
@Component
@Slf4j
public class MyAspect {// 【切入点 对哪些类 哪些方法来进行拦截】@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}// 【前置通知】@Before("autoFillPointCut()")public void beforeAdvice(JoinPoint joinPoint) {// 获取方法签名对象MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();// 获取方法名String methodName = methodSignature.getName();// 获取参数类型数组Class[] parameterTypes = methodSignature.getParameterTypes();// 获取返回类型Class returnType = methodSignature.getReturnType();//获得方法上的注解对象AutoFill autoFill = methodSignature.getMethod().getAnnotation(AutoFill.class);// 打印方法信息System.out.println("方法名:" + methodName);System.out.println("参数类型:" + Arrays.toString(parameterTypes));System.out.println("返回类型:" + returnType.getName());}
}
Signature
✒️
📘代码
@Aspect
@Component
public class MyAspect {@Before("execution(* com.example.service.*.*(..))")public void beforeAdvice(JoinPoint joinPoint) {// 获取连接点的签名信息Signature signature = joinPoint.getSignature();// 获取方法名String methodName = signature.getName();// 获取参数类型数组Class[] parameterTypes = signature.getParameterTypes();// 获取返回类型Class returnType = signature.getReturnType();// 打印方法信息System.out.println("方法名:" + methodName);System.out.println("参数类型:" + Arrays.toString(parameterTypes));System.out.println("返回类型:" + returnType.getName());}
}
这篇关于浅谈Spring中的JoinPoint MethodSignature Signature的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!