在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时,没有任何改变。那么为什么这些方法需要返回值?
答案 0 :(得分:0)
如果从这些拦截器方法返回null
,则代理类的方法调用的返回值将始终为null,即使实际方法返回非空值。
返回null对您有用,因为您可能只有返回void
的方法,但只要您的方法中有任何返回值,您的代码就会中断。
答案 1 :(得分:0)
您正在拦截调用方法,如果更改结果,逻辑行为将会更改。
重要提示:如果原始方法返回基本类型,您将从JDK代理获得漂亮的NullPointerExpection
。