ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Class<?> clazz = classLoader.loadClass("com.example.MyClass");
Class<?> clazz = Class.forName("com.example.MyClass");
Object obj = clazz.newInstance();
Method method = clazz.getMethod("myMethod");
method.invoke(obj);
interface MyInterface {
void myMethod();
}
class MyOriginalClass implements MyInterface {
public void myMethod() {
System.out.println("Original method invoked.");
}
}
class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method invocation.");
Object result = method.invoke(target, args);
System.out.println("After method invocation.");
return result;
}
}
public class Main {
public static void main(String[] args) {
MyInterface originalObj = new MyOriginalClass();
InvocationHandler handler = new MyInvocationHandler(originalObj);
MyInterface proxyObj = (MyInterface) Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
new Class<?>[] { MyInterface.class }, handler);
proxyObj.myMethod();
}
}