package com.mangoubiubiu.show.a14;
import org.springframework.cglib.core.Signature;
public class ProxyFastClass {
static Signature s0 = new Signature("saveSuper","()V");
static Signature s1 = new Signature("saveSuper","(I)V");
static Signature s2 = new Signature("saveSuper","(J)V");
//获取代理方法的编号
/**
* Target
* save()
* save(int)
* save(long)
* 根据方法的签名信息获取编号
* @param signature 方法的名字 参数 返回值
* @return
*/
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){
((Proxy)target).saveSuper();
return null;
}else if(index == 1){
((Proxy)target).saveSuper((int)args[0]);
return null;
}else if(index == 2){
((Proxy)target).saveSuper((long)args[0]);
return null;
}else {
throw new RuntimeException("无此方法");
}
}
public static void main(String[] args) {
ProxyFastClass fastClass = new ProxyFastClass();
int index = fastClass.getIndex(new Signature("saveSuper", "(I)V"));
System.out.println(index);
fastClass.invoke(index,new Proxy(),new Object[]{100});
}
}
package com.mangoubiubiu.show.a14;
import org.springframework.cglib.core.Signature;
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");
//获取目标方法的编号
/**
* Target
* save()
* save(int)
* save(long)
* 根据方法的签名信息获取编号
* @param signature 方法的名字 参数 返回值
* @return
*/
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){
((Target)target).save();
return null;
}else if(index == 1){
((Target)target).save((int)args[0]);
return null;
}else if(index == 2){
((Target)target).save((long)args[0]);
return null;
}else {
throw new RuntimeException("无此方法");
}
}
public static void main(String[] args) {
TargetFastClass fastClass = new TargetFastClass();
int index = fastClass.getIndex(new Signature("save", "(I)V"));
System.out.println(index);
fastClass.invoke(index,new Target(),new Object[]{100});
}
}