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

上一篇 下一篇

猜你喜欢

热点阅读