
//===== file:DynamicProxyFactory.java =====

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class DynamicProxyFactory ...{
/** *//**
* 创建代理对象
* @param target : 必须实现某个接口的对象
* @return 代理对象
*/
public static Object newProxyInstance(final Object target) ...{
Object proxy = Proxy.newProxyInstance(target.getClass()
.getClassLoader(), target.getClass().getInterfaces(),
new InvocationHandler() ...{
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable ...{
System.out.println("before invoke");
Object returnValue = method.invoke(target, args);
System.out.println("after invoke");
return returnValue;
}
});
return proxy;
}
}

//===== file:IProxy.java =====

public interface IProxy ...{
public String invoke();
}

//===== file:ProxyObject.java =====


public class ProxyObject implements IProxy ...{

public String invoke() ...{
System.out.println("method invoke");
return "oldobject";
}
}

//===== file:Test.java =====

public class Test ...{

public static void main(String[] args) ...{
ProxyObject oldobject = new ProxyObject();
IProxy newobject = (IProxy) DynamicProxyFactory.newProxyInstance(oldobject);
System.out.println(newobject.invoke());

}
}
本文介绍了一个使用Java反射API实现的动态代理工厂类,通过该工厂可以为任何实现了接口的对象创建代理实例。代理对象能够在目标方法调用前后添加额外的操作。
1752

被折叠的 条评论
为什么被折叠?



