AspectJ切面编程获取不到原始类型

来源:互联网 发布:mac电脑如何制作铃声 编辑:程序博客网 时间:2024/05/02 04:16

在完成一个自定义Redis注解缓存需求的时候,总是无法获取到方法参数类型是原始基本类型的方法,我使用的是如下方法:

String SpEL = "#uid";//获得方法参数Object[] args = proceedingJoinPoint.getArgs();//获得SpEL解析器ExpressionParser parser = new SpelExpressionParser();//获得SpEL上下文StandardEvaluationContext context = new StandardEvaluationContext();//把方法参数放入SpEL上下文中context.setVariable("uid", args[0]);//使用SpEL进行key的解析return parser.parseExpression(SpEL).getValue(context, String.class);

被环绕的方法是

public User getUserByUid(int uid);

执行总是报错NoSuchMethodException,把int改为Integer后就正常了,难到AspectJ返回的一直是包装过的类型?我想获得原始类型怎么办?
在Sebastian Kleinschmager写的《Aspect-Oriented Programming evaluated》一书中,4.1.4.2节中写到:
Aspect-Oriented Programming evaluated
原来是我获取方法参数的姿势不对,正确的获取方法是

MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();Class[] parameterTypes = signature.getParameterTypes();System.out.println(parameterTypes[0].getName());System.out.println(parameterTypes[0].isPrimitive());

这个时候就能判断出Integer和int了,之后可以准确调用被增强的方法,而不会报错了。