JDK的实现
1. 实现InvocationHandler接口
package reflect;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxyHandler implements InvocationHandler {
private Object proxied;
public DynamicProxyHandler(Object proxied) {
this.proxied = proxied;
}
@Override
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("**** proxy : " + Proxy.class
+ ", method : " + method + ", args : " + args);
if(null != args) {
for(Object arg : args) {
System.out.println("arg : " + arg);
}
}
return method.invoke(proxied, args);
}
}
interface Interface {
void doSomething();
void somethingElse(String str);
}
class RealObject implements Interface {
@Override
public void doSomething() {
System.out.println("do something");
}
@Override
public void somethingElse(String arg) {
System.out.println("something else : " + arg);
}
}
2. java.lang.reflect.Proxy.newProxyInstance()方法生成代理对象
package reflect;
import java.lang.reflect.Proxy;
public class SimpleDynamicProxy {
public static void consumer(Interface inter) {
inter.doSomething();
inter.somethingElse("a hahahaha");
}
public static void main(String[] args) {
RealObject obj = new RealObject();
consumer(obj);
System.out.println("----------");
Interface inter = (Interface) Proxy.newProxyInstance(Interface.class.getClassLoader(),
new Class[]{Interface.class}, new DynamicProxyHandler(obj));
consumer(inter);
}
}