在使用SpringAop时,大家会经常用到 JoinPoint 这个对象,归纳一下它的各种用法,还有它和ProcessdingJoinpoint 的关系。
JointPoint 意为加入的点 术语为 连接点 (连接切点与所要切入的方法),放到SpringAop中为所加入具体“切点”的点。
当我们使用 环绕通知 @Around 作为通知类型时,会使用ProceedingJoinPoint 这个连接点 ,ProceedingJoinPoint为 JoinPoint的子接口
public interface ProceedingJoinPoint extends JoinPoint {
void set$AroundClosure(AroundClosure var1);
// 执行方法 ,返回执行的结果 因为 环绕通知 不像 @Before @After 能够区分出,切点方法执行的前后要执行的前后顺序,
//因此使用 proceed()来 区分 方法执行的前后
Object proceed() throws Throwable;
//使用自己定义的 参数去Object[] var1 去执行方法
Object proceed(Object[] var1) throws Throwable;
}
ProceedingJoinPoint 作为JoinPoint的子接口 同样可使用 JoinPoint的接口方法。接下来看JoinPoint的方法 :
public interface JoinPoint {
String toString();
String toShortString();
String toLongString();
//获得当前的代理类对象
Object getThis();
//获取被代理的目标对象 常用
Object getTarget();
//获取被代理的方法参数 常用
Object[] getArgs();
//获取连接点的方法签名 展开具体的连接点的签名 常用
Signature getSignature();
//获取 资源的位置
SourceLocation getSourceLocation();
//获得连接点的通知类型
String getKind();
public interface EnclosingStaticPart extends JoinPoint.StaticPart { } //是一个 内部接口 接口的静态部分 public interface StaticPart { Signature getSignature();
SourceLocation getSourceLocation();
String getKind();
int getId();
String toString();
String toShortString();
String toLongString();
}
}
使用内部接口的意义益处
作用上讲:
类的内部接口和外部接口,都是启到接口的作用,接口就是来定义规范。 具体可以理解成一个类中进一步的逻辑细分
好处:
- 一种对那些在同一个地方使用的接口进行逻辑上分组;
- 封装思想的体现;
- 嵌套接口可以增强代码的易读性和可维护性;
- 内部接口不管有没有声明static,都是静态的.可以访问外部类的私有内容。
使用:当你定义了内部接口,实现的时候可以选择去实现这个内部接口 StacticPart,也可以选择实现内部接口的外部接口 JoinPoint,因此当你只想实现JoinPoint 中的个别方法,且内部类中的StacticPiont都用的话,只用实现 StacticPoint 就好,实现了逻辑上的细分。
在Map 中同样用到了内部类,定义Entry。
多次用到的 Signature接口
public interface Signature {
String toString();
//获得连接点较短的信息
String toShortString();
//获得连接点较长的信息
String toLongString();
//得到连接方法名 常用
String getName();
//得到方法的声明类型 Modifier.toString(jp.getSignature().getModifiers())
int getModifiers();
//得到连接点的类型
Class getDeclaringType();
//得到连接点方法的类名 常用
String getDeclaringTypeName();
}
参考网站
https://www.cnblogs.com/chenpi/p/5518400.html