您的位置:首页 > 编程语言 > ASP

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();}}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring aop api