spring aop 中 org.aspectj.lang.JoinPoint-中文简要API
2016-03-22 14:36
696 查看
转自链接点击打开链接AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。我们先来了解一下这两个接口的主要方法: 1)JoinPoint java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; Signature getSignature() :获取连接点的方法签名对象; java.lang.Object getTarget() :获取连接点所在的目标对象; java.lang.Object getThis() :获取代理对象本身; 2)ProceedingJoinPoint ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法: java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法; java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。
/** * 记录调用的类和方法 * @param point 切入点信息 */ private void logClassAndMethod(ProceedingJoinPoint point) { Class clz = point.getTarget().getClass(); //调用的类 String methodName = point.getSignature().getName(); //调用的方法名 logger.info("around [{}].[{}]", clz, methodName); }
/*** 记录调用信息*/private void logCallingInfo(ProceedingJoinPoint point) {logClassAndMethod(point);logArgs(point.getArgs());}private void logArgs(Object[] args) {/* 获得参数个数 */int argsLength = (args == null) ? 0 : args.length;if (argsLength > 0) {for (int i = 0; i < argsLength; i++) {logger.info("arg[{}]: {}", i, args[i]);}}}
private void checkParameters(Object[] args) throws ParameterException {/* 获得参数个数 */int argsLength = (args == null) ? 0 : args.length;if (argsLength > 0) {for (int i = 0; i < argsLength; i++) {/* 对可校验请求,进行校验,如果失败,直接返回参数错误信息 */if (args[i] instanceof CheckableParameter) {((CheckableParameter) args[i]).check();}}}}
相关文章推荐
- Android Manifest 用法
- 什么是 GraphQL?
- Spark RDD API详解(一) Map和Reduce
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- lwn拾遗:[sn3218 led drivers]-api解释-1
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 一个小型js框架myJSFrame附API使用帮助
- 详细分析交换机、路由器、集线器的区别和联系
- PowerShell打开或关闭光驱
- 批处理的api WMIC学习体会有感第1/2页
- 批处理 API实现文件下载的代码第1/2页
- Lua教程(十七):C API简介
- 强制删除工具 xdelbox xdelbox1.5正式版下载
- 揪出交换机端口背后“凶手”导致网速太慢
- 电脑重启后突然检测不到硬盘的原因分析与解决办法
- yui3的AOP(面向切面编程)和OOP(面向对象编程)
- C#中设计、使用Fluent API