代理模式(proxy)的一些整理

代理模式,網上有不少例子。最多的也最全的就是介紹的四種代理模式,靜態代理,動態代理--invocationhandler(實現了接口的被代理類),動態代理--CGLIB(未實現接口,類不是final),動態代理--編譯器提供的API動態建立代理類(未實現接口,類是final)。我這裏整理了一下別人資料。下面是動態代理之一的invocationhandler。詳細請看:html

https://www.toutiao.com/i6579893201602085379/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1541029119&app=news_article&utm_source=mobile_qq&iid=47365531296&utm_medium=toutiao_ios&group_id=6579893201602085379java

public class EnginnerProxy implements InvocationHandler {ios

    Object obj;api

    public Object bind(Object obj){oracle

        this.obj = obj;app

        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);ide

    }this

    @Override.net

    public Object invoke(Object proxy, Method method, Object[] args)  throws Throwable{代理

            System.out.println("Enginner writes document");

            Object res = method.invoke(obj, args);

            return res;

    }

}

**********************************************************************************************

動態代理的一個主要類是proxy,API中是這麼介紹:Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods(代理提供建立動態代理類和實例的靜態方法,而且也是由這些方法建立的全部動態代理類的超類)。

具體參考proxy API:https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Proxy.html。

proxy 的方法有四個,getInvocationHandler(Object proxy),getProxyClass(ClassLoader loader, Class<?>... interfaces),isProxyClass(Class<?> cl),newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h);具體參考上面API。

newProxyInstance使用到最多的,這篇文檔講的很細很全。能夠參考:https://blog.csdn.net/yangaiyu/article/details/73827043;

相關文章
相關標籤/搜索