1. 程式人生 > >spring原始碼閱讀(2)-aop之jdk動態代理深入解析

spring原始碼閱讀(2)-aop之jdk動態代理深入解析

續spring原始碼閱讀(2)-aop之j動態代理

我們從需求作為動態代理髮展的切入吧

現在有5個已經投產了的run100m的實現,我們新的需求需要監控不同實現的執行效能,如果我們針對這五個實現分別去新增效能監控的程式碼,如此就造成兩個問題:

一個是已經穩定的程式碼需要重新測試,

一個是設計上相同的程式碼出現在專案的各個地方,以後需要修改就需要修改5個地方,如果有新加實現就需要修改更多的處理點。

偉大的程式設計大師早就解決了這個問題,我們可以代理的方式,也就是我們的代理模式,我們來看下代理的uml類圖

上面是一個代理的uml類關係圖, 我們來看下ProxyRace的虛擬碼大概就清楚代理了

public class ProxyRace implement Race{
    private Race race;

    @Override
    public void race100m(){
        performancemonitor.start();
        race.run100m();
        performancemonitor.end();
    }
}

看到這裡對靜態代理是不是一下就清晰了。

代理的關鍵在於介面,代理,實現類都實現了相同的介面,代理類關聯了一個實現類,由代理去呼叫實現類的方法,如此代理類就可以新增自己的業務了。

回到效能監控的需求上面,可見使用代理的模式是不是使上面的需求一下變得簡單易於維護了,以後對於效能監控的程式碼只要修改代理類這一處就ok了。也減少了程式碼的改動點,從而減少測試工作,並且以後的實現還是隻要關注run100m的業務就好,不用關注效能方面的業務,也免去了其他業務程式碼的侵入,鬆了耦合。