首先我们来看下Java代码如下:
首先Interface接口:
package practiceDemo14;
//接口
public interface Interface {
void doSomething();
void somethingElse(String args);
}
接下来我们编写SimplyProxy代码如下:
package practiceDemo14;
public class SimpleProxy implements Interface {
private Interface proxied;
public SimpleProxy(Interface proxied){
this.proxied=proxied;
}
@Override
public void doSomething() {
proxied.doSomething();
}
@Override
public void somethingElse(String args) {
proxied.somethingElse(args);
}
}
下一个类
package practiceDemo14;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* Java中的动态代理
*/
public class DynamicProxyHandler implements InvocationHandler {
private Object proxied;
public DynamicProxyHandler(Object proxied){
this.proxied=proxied;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("**** proxy:"+proxy.getClass()+",method: "+method +" ,args :"+args);
if(args!=null){
for(Object arg:args){
System.out.println(" "+arg);
}
}
return method.invoke(proxied,args);
}
}
下面代码如下:
package practiceDemo14;
import java.lang.reflect.Proxy;
public class SimplyDynamicProxy {
public static void consumer(Interface iface){
iface.doSomething();
iface.somethingElse("bonon");
}
public static void main(String ...args){
RealObject realObject=new RealObject();
consumer(realObject);
// Interface proxy= Proxy.newProxyInstance(Interface.class.getClassLoader(),new Class[]{Interface.class},new DynamicProxyHandler(realObject));
Interface proxy= (Interface) Proxy.newProxyInstance(Interface.class.getClassLoader(),new Class[]{Interface.class},new DynamicProxyHandler(realObject));
consumer(proxy);
}
}