运行结果:
参考代码:
package com.cus;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author lzl
* @date: 2021-12-06 11:20
*/
interface IA {
String getHelloName();
}
public class ShowMeBug {
public static void main(String[] args) throws Exception{
String first = IA.class.getName()+"$getHelloName=Abc";
IA ia = (IA) createObject(first);
System.out.println(first);
System.out.println(ia.getHelloName()); //方法名匹配的时候,输出“Abc”
first = IA.class.getName()+"$getTest=Bcd";
ia = (IA) createObject(first);
System.out.println(first);
System.out.println(ia.getHelloName()); //方法名不匹配的时候,输出null
}
public static Object createObject(String str) throws Exception {
String[] classMethodNameAndParaArray = str.split("\\$");
String className = classMethodNameAndParaArray[0];
String methodNameAndPara = classMethodNameAndParaArray[1];
String[] splitArray = methodNameAndPara.split("=");
String name = splitArray[0];
String value = splitArray[1];
Class<?> classObj = Class.forName(className);
//自定义的方法调用事件处理器
InvocationHandler invocationHandler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(name.equals(method.getName())){
return value;
}
return null;
}
};
Class [] interfaceArray = new Class[1];
interfaceArray[0] = classObj;
Object object = Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),
interfaceArray, invocationHandler);
return object;
}
}