一、什么是AOP?
aop技術是面向切面編程思想,作為OOP的延續思想添加到企業開發中,用於彌補OOP開發過程中的缺陷而提出的編程思想。AOP底層也是面向對象;只不過面向的不是普通的Object對象,而是特殊的AOP對象。AOP的關注點是組成系統的非核心通用服務模塊(比如登錄檢查等),相對於普通對象,aop不需要通過繼承、方法調用的方式來提供功能,只需要在xml文件中以引用的方式,將非核心服務功能引用給需要改功能的核心業務邏輯對象或方法中。最終實現對象的解耦。spring 中ioc技術實現了核心業務邏輯對象之間的解耦(如LoginAction與DaoImpl)
二、AOP相對於OOP有什么好處?
OOP,面對對象編程思想。OOP的問題不存在於開發階段,在開發階段和首次測試階段中,使用OOP是效率最高也是最簡單的一種方式。OOP問題體現在軟件開發完畢之后的二次測試階段,軟件修改完畢之后,需要對軟件中修改的方法進行重新測試,之后才可以上線運行。這時測試的對象是當前修改的方法 以及 和該方法具有級聯/依賴關系的所有的其他方法。這樣做顯然了延長二次測試周期。 而使用aop在二次測試時,因為他是配置在xml文件中的,所以並不需要測試相關的所有類。
三、spring中如何使用aop?
我們使用一個例子來介紹下如何在spring中使用aop,
這里我們提供一個類StuAction,為這個類中的核心業務邏輯方法(addStu、delStu)添加登錄檢查的功能。
spring中的AOP技術提供了四種基本類型的通知:
- before通知 ~ 核心方法執行之前的通知 MethodBeforeAdvice
- after通知 ~ 核心方法執行之后的通知 AfterReturningAdvice
- around通知 ~ 核心方法執行時的通知before+after filter、interceptor都是一種around通知 MethodInterceptor
- throws通知 ~ 核心方法執行出現異常之后執行的通知 ThrowsAdvice
這四種通知我們都來測試下:
注意:在測試athrows通知時把StuAction中的int i = 1/0;
取消注釋,我們創建一個異常來進行測試。
另外,after通知主要用來核心方法調用結束后輸出日志,所以這里用到了log4j 。
log4j.properties
好了,准備工作完畢,那我們如何在spring容器中配置aop呢?
重點的來了!
在applicationContext.xml中配置aop:
首先導入spring 中aop下所有包,log4j 包
使用test類測試一下:
結果如下: