private static Object processReturnType(Object proxy, Object target, Method method, Object retVal) {
// Massage return value if necessary
if (retVal != null && retVal == target && !RawTargetAccess.class.isAssignableFrom(method.getDeclaringClass())) {
// Special case: it returned "this". Note that we can't help
// if the target sets a reference to itself in another returned object.
retVal = proxy;
}
Class<?> returnType = method.getReturnType();
//isPrimitive 此方法主要用来判断Class是否为原始类型(boolean、char、byte、short、int、long、float、double)。 returnType != Void.TYPE 是否是无返回值类型
if (retVal == null && returnType != Void.TYPE && returnType.isPrimitive()) {
throw new AopInvocationException(
"Null return value from advice does not match primitive return type for: " + method);
}
return retVal;
}
Caused by: org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public int com.xx.mnt.limit.service.impl.TgeneralQuotaManagerServiceImpl.updateTgeneralQuotaManager(com.xx.mnt.dmo.TgeneralQuotaManager)
Null return value from advice does not match primitive return type for这个一般都是发生在代码做了环绕后。
因为环绕没有返回值为null,select方法返回类型不是void ,而是int,刚好满足条件,抛出此异常。int是无法匹配null的(除非是包装类型Integer,不过接到的一直是null)。
还是需要改环绕,加上返回值就不报错了:
@Around("updatePoint()")
public void around(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
}
改为
@Around("updatePoint()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
return result;
}