this is a Jdk Dynamic Proxy Plus that can enhance both class and interface.like cglib ,We can also implement a proxy when we don't have an interface
the generator will generate the proxy by the parameters(class or interface) you sent.
the follow is the generated class:
public final class DemoProxy extends TargetClass implements HelloInterface {
private static Method m1;
private static Method m2;
private static Method m3;
private static Method m4;
private static Method m0;
private InvocationHandler h;
public DemoProxy(InvocationHandler var1) throws {
this.h = var1;
}
public final boolean equals(Object var1) throws {
try {
return (Boolean)this.h.invoke(this, m1, new Object[]{var1});
} catch (RuntimeException | Error var3) {
throw var3;
} catch (Throwable var4) {
throw new UndeclaredThrowableException(var4);
}
}
public final String toString() throws {
try {
return (String)this.h.invoke(this, m2, (Object[])null);
} catch (RuntimeException | Error var2) {
throw var2;
} catch (Throwable var3) {
throw new UndeclaredThrowableException(var3);
}
}
public final String hello(String var1) throws {
try {
return (String)this.h.invoke(this, m3, new Object[]{var1});
} catch (RuntimeException | Error var3) {
throw var3;
} catch (Throwable var4) {
throw new UndeclaredThrowableException(var4);
}
}
public final String targetValue(String var1) throws {
try {
return (String)this.h.invoke(this, m4, new Object[]{var1});
} catch (RuntimeException | Error var3) {
throw var3;
} catch (Throwable var4) {
throw new UndeclaredThrowableException(var4);
}
}
public final int hashCode() throws {
try {
return (Integer)this.h.invoke(this, m0, (Object[])null);
} catch (RuntimeException | Error var2) {
throw var2;
} catch (Throwable var3) {
throw new UndeclaredThrowableException(var3);
}
}
static {
try {
m1 = Class.forName("java.lang.Object").getMethod("equals", Class.forName("java.lang.Object"));
m2 = Class.forName("java.lang.Object").getMethod("toString");
m3 = Class.forName("com.lzl.test.HelloInterface").getMethod("hello", Class.forName("java.lang.String"));
m4 = Class.forName("com.lzl.test.TargetClass").getMethod("targetValue", Class.forName("java.lang.String"));
m0 = Class.forName("java.lang.Object").getMethod("hashCode");
} catch (NoSuchMethodException var2) {
throw new NoSuchMethodError(var2.getMessage());
} catch (ClassNotFoundException var3) {
throw new NoClassDefFoundError(var3.getMessage());
}
}
}