官术网_书友最值得收藏!

3.2 動態(tài)代理機制與Spring AOP

在Java的世界中,實現(xiàn)AOP的主流方式是采用動態(tài)代理(Dynamic Proxy)機制,這點對于Spring AOP也一樣。代理機制的主要目的就是為其他對象提供一種代理以控制對當前對象的訪問,用于消除或緩解直接訪問對象帶來的問題。通過這種手段,一個對象就代表另一個對象的部分功能,我們創(chuàng)建包含當前對象的對象,以便向外界提供功能接口。本節(jié)將關注目前主流的動態(tài)代理實現(xiàn)技術,并分析Spring AOP中的代理實現(xiàn)方式。

在Spring中,采用的代理機制有兩種,即JDK動態(tài)代理和CGLIB動態(tài)代理。為了介紹動態(tài)代理機制,這里我們引入一個具體的應用場景。考慮一個Account接口,它包含一個用于圖片展示的open()方法,如代碼清單3-5所示。

代碼清單3-5 Account接口代碼

public interface Account{
    void open();
}

然后針對該接口有一個實現(xiàn)類RealAccount,其中的方法實現(xiàn)只用于模擬,不包含具體業(yè)務,如代碼清單3-6所示。

代碼清單3-6 Account接口實現(xiàn)類代碼

public class RealAccount implements Account {
    private String name;

    public RealAccount(String name) {
        this.name = name;
    }

    @Override
    public void open() {
        System.out.println("Open the account for:" + name);
    }
}

現(xiàn)在,假設需要在執(zhí)行RealAccount的open()方法的前后分別打印日志信息。我們接下來討論如何分別基于JDK動態(tài)代理和CGLIB動態(tài)代理來實現(xiàn)這一目標。

主站蜘蛛池模板: 房山区| 温泉县| 潞西市| 正宁县| 永和县| 涡阳县| 仁化县| 临沧市| 霍城县| 九龙县| 兴业县| 吴川市| 新化县| 鹤山市| 丰县| 巴林右旗| 新昌县| 买车| 日喀则市| 宣威市| 阿巴嘎旗| 广汉市| 江西省| 禄劝| 南城县| 容城县| 高青县| 都安| 上蔡县| 武强县| 怀集县| 平和县| 凤冈县| 河间市| 泗阳县| 常德市| 高雄县| 阳曲县| 观塘区| 通渭县| 宜良县|