CGLib方法拦截或JDK方法调用中的return对象是什么意思?

What is the meaning of the return Object in CGLib method intercept or JDK method invoke?

在CGLib代理的方法拦截中:

public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
    // TODO Auto-generated method stub
    Performance performance = new Performance();
    performance.begin(arg0.getClass().getName() + "." + arg1.getName());
    Object result = arg3.invokeSuper(arg0, arg2);//or just arg3.invokeSuper(arg0, arg2); and return null
    performance.end();
    return result;
}

并且在 JDK 代理的方法调用中

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    // TODO Auto-generated method stub
    Performance performance = new Performance();
    performance.begin(target.getClass().getName() + ":" + method.getName());
    Object obj = method.invoke(target, args);//or just method.invoke(target, args); and return null
    performance.end();
    return obj;
}

但是当我 return 为 null 时,什么都没有 changed.So 为什么这些方法需要一个 return 值?

如果您 return null 来自这些拦截器方法,那么您对代理 class 的方法调用的 return 值将始终为空,即使实际方法return编辑非空值。

返回 null 对你有用,因为你可能只有 returns void 的方法,但是一旦你的方法中有任何 return 值,你的代码就会中断.

你正在拦截一个调用方法,如果你改变结果,逻辑行为也会改变。 重要提示:如果原始方法 returns 是原始类型,您将从 JDK 代理获得漂亮的 NullPointerExpection