面向切面編程AOP

AOP的目的

? AOP(Aspect Oriented Programming)面向切面編程,是屬于OOP概念的一個補充,可以設(shè)想以下場景:我們在做一個學籍管理系統(tǒng),我們需要將不同角色(學生、老師、管理員等)的每個操作都寫入日志里面,因為可能類型角色不多,我們可以這樣寫

需要無無聊聊寫入日志的學生類

? 其他的教師類或者管理員類也可以這樣寫。可是,如果出現(xiàn)角色類型越來越多的話,每個角色類都這樣寫的話,每段代碼都具有l(wèi)og()代碼,這樣的話代碼冗余量高;并且,當我們需要改動log()方法時,則需每個角色類去修改。因此,可以將其抽象成日志類或者可以將其抽象成為相應(yīng)的接口。

通過靜態(tài)Log類來實現(xiàn)寫入日志

? 這樣當我們需要改動log()方法時,只需要改動Log類的方法就好,這樣的話并無需要對整體代碼進行改動,可以較好地解決剛剛那個問題。

? 可是,隨著需求的增多,系統(tǒng)規(guī)模的變大,即便運用上述的方法,也可能無可避免一個新的問題。假設(shè)有一個場景是這樣的,學生因為年級、專業(yè)的不同可能具有不同的權(quán)限,老師因為專業(yè)、職位的不同也有不同的權(quán)限,而我又不想為僅僅是一兩個特殊的方法而新增加相應(yīng)的類,所以就直接在student類里面像寫入日志那樣,加入權(quán)限的驗證的功能,ok,這就搞定;可是如果某一天,我又需要加入其他與老師、學生本身無關(guān)的功能(異常處理、錯誤監(jiān)控)等等,這樣就會使我們原本的核心業(yè)務(wù)類變得不純粹(不僅僅包含核心業(yè)務(wù)功能,也包含一些其他輔助的功能)。可是,如果想我們的類僅包含核心業(yè)務(wù)功能,那些輔助功能不會出現(xiàn)在我們的代碼中,只是我們需要的時候,才會被系統(tǒng)調(diào)用,出于這種考慮,就出現(xiàn)了AOP(面向切面編程)。


AOP粗糙解釋

? ? AOP面向切面編程會將代碼動態(tài)地切入到我們需要的地方,在我們需要的地方來運行。只需要定義好這個切面(切面函數(shù):要進行什么操作,切入點:在什么時候進行),那么編譯器就會將切面函數(shù)的代碼在編譯期間,寫進相應(yīng)地方(切入點)的代碼的.class文件中(織入)。

? AOP的實現(xiàn)技術(shù)有AspectJ和spring框架的AOP。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容