JointPoint用法及与ProceedingJoinPoint 的关系
时间:2022-07-22
本文章向大家介绍JointPoint用法及与ProceedingJoinPoint 的关系,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在使用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
- Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- BTC.com时讯-IBM等老牌大企业因区块链技术获得新活力
- Kit 3D 更新
- Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- 晚上好啊!这是今天人工智能精选要闻
- 构建Flex应用的10大误区
- Flex的起步推动新语言学习
- 简单科普云计算相关内容
- Silverlight初级教程-开发工具
- WCF的Binding模型之五:绑定元素(Binding Element)
- 2018年物联网发展趋势
- Silverlight初级教程-概述
- WCF的Binding模型之四:信道工厂(Channel Factory)
- 如何做一个好的前端重构工程师
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自定义控件之水平圆点加载进度条
- Android屏幕旋转之横屏竖屏切换的实现
- Android Studio连接SQLite数据库的登录注册实现
- Android 获取 usb 权限的两种方法
- Android实现两圆点之间来回移动加载进度
- Android使用第三方库实现日期选择器
- Android Activity向右滑动返回
- 大多数人都不懂的搜索引擎技巧,掌握这几点,提升你的工作效率
- 如何使用Flutter实现58同城中的加载动画详解
- Android Gradle开发指南详解
- Hexo+Github搭建个人博客:Hexo添加分类标签
- Android自定义酒店日期选择器
- Android实现apk插件方式换肤的实例讲解
- 基于Spark Graphx实现ID-Mapping
- Nginx keepalived一主一从高可用,手把手带你一步一步配置!