spring原始碼閱讀(2)-aop之jdk動態代理深入解析
阿新 • • 發佈:2018-12-16
續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的業務就好,不用關注效能方面的業務,也免去了其他業務程式碼的侵入,鬆了耦合。