在CGLib方法拦截或JDK方法调用中返回Object的含义是什么?

时间:2016-08-28 07:49:20

标签: java proxy cglib

在CGLib代理的方法拦截中:

su arch 
su - arch # mind the space
su -- arch # The -- marks the end of options, gives way for non-options arguments

并在JDK代理的方法调用中

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

但是当我返回null时,没有任何改变。那么为什么这些方法需要返回值?

2 个答案:

答案 0 :(得分:0)

如果从这些拦截器方法返回null,则代理类的方法调用的返回值将始终为null,即使实际方法返回非空值。

返回null对您有用,因为您可能只有返回void的方法,但只要您的方法中有任何返回值,您的代码就会中断。

答案 1 :(得分:0)

您正在拦截调用方法,如果更改结果,逻辑行为将会更改。 重要提示:如果原始方法返回基本类型,您将从JDK代理获得漂亮的NullPointerExpection