java 靜態代理 動態代理

代理模式作用:
     屏蔽真實行爲的訪問,讓程序更加安全。

     可以對真實行爲的調用進行控制。

一個典型的代理模式有三要素

     1.代理類與被代理類要實現同一個接口.
     2.在代理類中持有被代理對象.

     3.在代理類中調用被代理的行爲。

即:

共同接口
public interface Action {
    public void doSomething();

}

真實對象
public class RealObject implements Action{
    public void doSomething() {
        System.out.println("do something");
    }

}

代理對象
public class Proxy implements Action {
    private Action realObject;
    public Proxy(Action realObject) {
        this.realObject = realObject;
    }
    public void doSomething() {
        System.out.println("proxy do");
        realObject.doSomething();
    }
}
運行代碼
    Proxy proxy = new Proxy(new RealObject());

    proxy.doSomething();

這樣就可以不用創建 真實對象了, 只是創建代理對象 就可以做到真實對象做的事情了。

可以很好的隱藏真實對象。

然後再在代理類中相同的方法裏面加些東西,就可以爲原功能進行擴展了。

一般將這種代理模式稱爲靜態代理

靜態代理的優點和缺點

這種代理模式的優點: 擴展原功能,不侵入原代碼。

這種代理模式的缺點:如果有多個真實類對象,要麼創建多個代理類,要麼一個代理類添加多個接口,但都很繁瑣。


動態代理

     通過使用動態代理,我們可以通過在運行時,動態生成一個持有RealObject、並實現代理接口的Proxy,同時注入我們相同的擴展邏輯

也就是輸入被代理對象、接口  就可以得到一個代理對象,然後執行代理對象的方法。

一般有兩種方式:
  1.通過jdk中提供的Proxy類來實現
   這種方式要求,被代理類必須實現接口。
   簡單說,只能爲接口做代理.
  2.通過cglib來實現。

   它不要求,實現接口。

jdk動態代理 需要輸入被代理對象、接口

cglib不要求輸入接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章