Spring(2)AOP

前言

        OOP編程引進了"抽象"、"封裝"、"繼承"、"多態"等概念,對萬事萬物進行抽象和封裝,來建立一種對象的層次結構,它強調了一種完整事物的自上而下的關係。但是具體細粒度到每個事物內部的情況,OOP就顯得無能爲力了。比如日誌功能,日誌代碼往往水平地散佈在所有對象層次當中,卻與它所散佈到的對象的核心功能毫無關係。對於其他很多類似功能,如事務管理、權限控制等也是如此。這導致了大量代碼的重複,而不利於各個模塊的重用。

        AOP-Aspect-Oriented Programming,即面向切面編程,是對OOP思想的補充和完善。它利用一種稱爲"橫切"的技術,能夠剖解開封裝的對象內部,並將那些影響了多個類並且與具體業務無關的公共行爲 封裝成一個獨立的模塊(稱爲切面)。更重要的是,它又能以巧奪天功的妙手將這些剖開的切面復原,不留痕跡的融入核心業務邏輯中。這樣,對於日後橫切功能的編輯和重用都能夠帶來極大的方便。

一、AOP的基本術語

切面(aspect):用來切插業務方法的類。
連接點(joinpoint):是切面類和業務類的連接點,其實就是封裝了業務方法的一些基本屬性,作爲通知的參數來解析。
通知(advice):在切面類中,聲明對業務方法做額外處理的方法。
切入點(pointcut):業務類中指定的方法,作爲切面切入的點。其實就是指定某個方法作爲切面切的地方。
目標對象(target object):被代理對象。
AOP代理(aop proxy):代理對象。
通知類型:
(1)前置通知(before advice):在切入點之前執行。
(2)後置通知(after returning advice):在切入點執行完成後,執行通知。
(3)環繞通知(around advice):包圍切入點,調用方法前後完成自定義行爲。
(4)異常通知(after throwing advice):在切入點拋出異常後,執行通知。

二、AOP使用場景

Authentication 權限
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶加載
Debugging  調試
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 性能優化
Persistence  持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務

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