Exception in thread "main" org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public int com.fanling.xmlaop.UserDaoImpl.addUser(com.fanling.xmlaop.User)
at org.springframework.aop.framework.CglibAopProxy.processReturnType(CglibAopProxy.java:391)
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:84)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:690)
这个错就是返回的类型不匹配。
造成的原因:
目标类的方法有返回值,而around环绕方法没有返回值
解决方法
CglibAopProxy.java类
@Nullable
private static Object processReturnType(Object proxy, @Nullable Object target, Method method, @Nullable Object returnValue) {
if (returnValue != null && returnValue == target && !RawTargetAccess.class.isAssignableFrom(method.getDeclaringClass())) {
returnValue = proxy;
}
Class<?> returnType = method.getReturnType();
if (returnValue == null && returnType != Void.TYPE && returnType.isPrimitive()) {
throw new AopInvocationException("Null return value from advice does not match primitive return type for: " + method);
} else {
return returnValue;
}
}
方法1:将int 改为包装类型不报错
方法2:修改around的方法,修改为Object返回类型
public Object around(ProceedingJoinPoint pjt ){
Object object = null;
try {
System.out.println("环绕通知");
object= pjt.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return object;
}