Java温故而知新之Proxy
2017-03-06 本文已影响14人
卖梦想的男孩
Proxy是Java中实现动态代理的一种方式,也是装饰模式的一种体现。内部主要是通过反射来生成代理实例,进而实现所谓的代理现象啊。
使用
Proxy的使用依赖于接口,所以使用之前确保需要代理的方法是面向接口的。
定义接口
public interface TargetService {
String doThing(String... args);
}
默认实现类
public class TargetServiceImpl implements TargetService {
@Override
public String doThing(final String... args) {
System.out.println("TargetServiceImpl.doThing");
return Arrays.toString(args);
}
}
代理类
public class SimpleProxyHandler implements InvocationHandler {
private Object mTarget;
private SimpleProxyHandler(Object target) {
this.mTarget = target;
}
@Override
public Object invoke(final Object target, final Method method, final Object[] objects) throws Throwable {
System.out.println("before SimpleProxyHandler.invoke");
Object result = method.invoke(mTarget, objects);
System.out.println("after SimpleProxyHandler.invoke");
return result;
}
public static Object wrap(Object target) {
return Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
target.getClass().getInterfaces(),
new SimpleProxyHandler(target)
);
}
}
调用
TargetService service = new TargetServiceImpl();
TargetService proxy = (TargetService) SimpleProxyHandler.wrap(service);
System.out.println(proxy.doThing("1", "2", "3"));
参考
http://blog.csdn.net/zhangerqing/article/details/42504281