50,687
社区成员
发帖
与我相关
我的任务
分享
public interface Interface {
void doSomething();
void somethingElse(String arg);
}
public class RealObject implements Interface{
@Override
public void doSomething() {
System.out.println("do something");
}
@Override
public void somethingElse(String arg) {
System.out.println("do some thing else "+arg);
}
}
public class DynamicProxyHandler implements InvocationHandler{
private Object proxied;
/**
* function:绑定委托对象并返回一个代理类
*/
public Object bind(Object proxied){
this.proxied=proxied;
//得到代理对象,传入参数:类加载器、接口列表、以及InvocationHandler的实现(这里是对象本身)
return Proxy.newProxyInstance(proxied.getClass().getClassLoader(),
proxied.getClass().getInterfaces(), this);
}
@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("args= "+arg);
}
}
//可以对特定方法进行操作
if(method.getName().equals("somethingElse")){
System.out.print("SOME THINGELSE:");
}
//请求转发,调用被代理对象的方法 执行实际方法
return method.invoke(proxied, args);
}
}
public class SimpleDynamicProxy{
public static void consumer(Interface iface){
iface.doSomething();
iface.somethingElse("bibo");
}
public static void main(String[] args){
RealObject real = new RealObject();
/*consumer(real);*/
/**proxy:代理对象 real:被代理对象**/
DynamicProxyHandler dynamicProxyHandler = new DynamicProxyHandler();
Interface proxy = (Interface) dynamicProxyHandler.bind(real);
consumer(proxy);
}
}