Spring AOP学习笔记2

spring中用joinpoint来访问目标方法的参数

早先就接触到joinpoint这个接口,今天查了下spring的官方文档, 发现文档中关于joinpoint这个接口方法的介绍很少,而且跟编译器里面看到的底层源码相比,少了很多内容,以下都是以编译器里面能看到的源码为基础来介绍。

joinpoint切点是用getSignature()方法来获取增强方法信息的,JoinPoint本身是个接口,在调用这个方法的时候,我发现它跳到了子类MethodInvocationProceedingJoinPoint中去,也就是说,本次实验的实现类就是joinpoint的这个实现类.

public interface JoinPoint {
String toString(); //连接点所在位置的相关信息
String toShortString(); //连接点所在位置的简短相关信息
String toLongString(); //连接点所在位置的全部相关信息
Object getThis(); //返回AOP代理对象
Object getTarget(); //返回目标对象
Object[] getArgs(); //返回被通知方法参数列表
Signature getSignature(); //返回当前连接点签名
SourceLocation getSourceLocation();//返回连接点方法所在类文件中的位置
String getKind(); //连接点类型
StaticPart getStaticPart(); //返回连接点静态部分
}

getSignature()方法的返回值是一个Signature的接口,而Signature接口中有三个方法比较常用到
1、getName()
返回增强方法的方法名
2、getDeclaringTypeName()
返回增强方法所处位置,即包名+类名
3、getDeclaringType()
返回增强方法所处的类,即class的类型
class getDeclaringType();

Spring advice的实现代码如下:


1.png

输出结果如下图所示:


2.png

从输出结果图,我们也能看出来,getSignature()这个方法的实现是在类MethodInvocationProceedingJoinPoint里边。

参考链接:https://blog.csdn.net/zhengchao1991/article/details/53391244

你可能感兴趣的:(Spring AOP学习笔记2)