动态代理

2020-06-01  本文已影响0人  GIT提交不上

一、代理模式

  由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

图1-1 代理模式.png

二、动态代理

  接口类如下:

public interface IHelloService {
    void dealHelloService();
}

  接口实现类如下:

public class HelloServiceImpl implements IHelloService{
    @Override
    public void dealHelloService() {
        System.out.println("hello world!");
    }
}

  动态代理类如下:

public class ProxyHandler implements InvocationHandler {
    private Object target;
    public ProxyHandler(Object target) {
        super();
        this.target = target;
    }
    public Object getProxy(){
        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),target.getClass().getInterfaces(),this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(target,args);
    }
}

  测试类如下:

public class Test {
    public static void main(String[] args) {
        IHelloService iHelloService = new HelloServiceImpl();
        ProxyHandler handler = new ProxyHandler(iHelloService);
        IHelloService service = (IHelloService)handler.getProxy();
        service.dealHelloService();
    }
}
图2-1 动态代理流程图.png

JAVA动态代理
Java之美[从菜鸟到高手演练]之JDK动态代理的实现及原理

上一篇 下一篇

猜你喜欢

热点阅读