由於常見的業務都須要加上一些公共的業務,Spring把公共業務稱爲關注點,關注點常見的有日誌,安全,權限,緩存,事物等。由於公共業務會常常使用,因此就提取出來,放在一個公共的方法裏面。代碼就能夠複用了。可是公共業務可能會實現比較複雜的操做,並且整個程序均可能會調用公共業務,因此就能夠把公共業務提出變成一個類,經過類來調用公共業務。可是經過類來調用代碼,也會須要一行去調用的代碼。好比A.log()。這一行代碼自己和業務是沒有關係的。這一行代碼就會使得業務不是很純粹,設計模式中也提過單一職責原則,那這個類除了處理自己的業務之外,還有添加公共業務的做用。並且也產生了依賴關係。spring
雖然把公共業務提出來做爲一個單獨的類,可讓業務更加純粹,而後在增長一個代理類,添加公共業就在代練類裏面添加會很方便。但是若是業務多了,每一個業務都有可能添加公共業務,那麼每一個業務都須要一個代理類,就會形成類過多。而動態代理就是爲了解決這個問題出現的。動態代理能夠代理全部的類。動態代理經過proxy生產代理實理。而後經過代理實例去調用真實對象的時候,會調用代理實例的invoke方法去創建真實對象和代理實例的聯繫。編程
如今軟件開發已經分得很清楚了,不一樣的領域設計的業務都不同,可是同一個領域都會有一些共同的業務。咱們把這部分共同的業務抽出來,就成了領域模型。好比在支付領域。不管是支付寶,或者微信,或者其餘支付方式。它的過程基本都是固定的:
接入第三方接口——安全驗證——身份驗證——餘額驗證——支付。
這個過程就能夠抽出來,就是一個領域業務了。設計模式
aop的做用就是在不改變原有代碼的基礎上,新添加功能,像是橫切進去同樣,因此叫面向切面編程。aop實際上也是經過動態代理來實現的。spring提供了一個動態代理的框架,使得編寫代碼更方便。緩存