AOP的通俗理解

https://www.cnblogs.com/baiduligang/p/4246976.html

面向對象編程更多的操作是在縱向部分(即繼承,接口實現之類),這就導致一些需要在橫向上(即業務代碼方法中的前後)嵌入的非核心代碼得在每一個方法上都要去寫(比如日誌,權限,異常處理等)。它們散佈在各方法的橫切面上,造成代碼重複,也不利於各個模塊的重用(畢竟,不同方法還是有所區別)。
AOP就是爲了解決這種男題而生的
從AOP這個英文縮寫來看就好。。。A是一把刀,把P的突出部分切出來(類比於圍繞方法設定的日誌,權限等需求,它們都是屬於核心方法外的通用服務),它們有一個共性—-圓溜溜的(就像一個工具箱中的扳手,鉗子,螺絲刀之類的),所以能把它們集合成一塊兒(它們都具有’工具‘的屬性),就是中間的O。重新給接回去的時候,就着不同的需求,用O中不同的工具就好(通過不同的方法或註解指明)。
概念陳列:
目標對象,AOP代理對象,連接點,切入點,攔截器,通知,織入,
假設有一個對象A(目標對象),外部的請求人B要想訪問到A,需要通過一個安檢過程(連接點,比如驗證權限m1,登錄密碼m2,身份識別m3等)。B開始訪問後,首先得經過第一層的安檢(準備走誰(introductionInterceptor)的哪一層安檢(PointCut–》指定到具體的安檢流程),由你定義的interceptor攔截器決定),即權限驗證m1(切入點)。通過這一層後,監控整個訪問過程的你可以決定是否要向大家夥兒通報外部請求的訪問情況【像:B那孫子進來啦 OR B那孫子帶着貪玩藍月系來嘞 OR B那小子是渣渣輝的部下】(在訪問開始前,還是結束後,還是全程播報—->這就是’通知‘)。於A而言,他覺得直接跟B接觸可能不太安全,所以A把自己的一些權限給到了代理對象Proxy_A,並讓Proxy_A去正面’剛(也即織入,A間接的給自己加持了一副鎧甲)‘B(或許是來者不善乜)。Proxy_A是怎樣產生的呢?這就是AOP動態代理的輔助了。簡單來講,不論你是什麼代理—》Proxy_某個目標對象,只要是通過JDK或者CGLib的代理副本傳送門(類比於抽象)進入到剛B的’對戰場景‘中,那麼,他都算是A(或者其他目標對象)的代言人。

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