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; }