042 - 第十四讲 - MethodProxy 原理
public class TargetFastClass {
static Signature s0 = new Signature("save","()V");
static Signature s1 = new Signature("save","(I)V");
static Signature s2 = new Signature("save","(J)V");
//获取目标方法的编号
public int getIndex(Signature signature){
if(s0.equals(signature)){
return 0;
}else if(s1.equals(signature)){
return 1;
}else if(s2.equals(signature)){
return 2;
}
return -1;
}
//根据方法的编号 , 正常调用目标对象方法(非反射)
public Object invoke(int index , Object target , Object[] args){
if(index == 0){
((CglibProxyTarget)target).save();
return null;
}else if(index == 1){
((CglibProxyTarget)target).save((int)args[0]);
return null;
}else if(index == 2){
((CglibProxyTarget)target).save((long)args[0]);
return null;
}
throw new RuntimeException("无此方法!");
}
}