spring aop的五種通知型別
阿新 • • 發佈:2019-01-23
spring aop通知(advice)分成五類:
前置通知[Before advice]:在連線點前面執行,前置通知不會影響連線點的執行,除非此處丟擲異常。
正常返回通知[After returning advice]:在連線點正常執行完成後執行,如果連線點丟擲異常,則不會執行。
異常返回通知[After throwing advice]:在連線點丟擲異常後執行。
返回通知[After (finally) advice]:在連線點執行完成後執行,不管是正常執行完成,還是丟擲異常,都會執行返回通知中的內容。
環繞通知[Around advice]:環繞通知圍繞在連線點前後,比如一個方法呼叫的前後。這是最強大的通知型別,能在方法呼叫前後自定義一些操作。環繞通知還需要負責決定是繼續處理join point(呼叫ProceedingJoinPoint的proceed方法)還是中斷執行。
接下來通過編寫示例程式來測試一下五種通知型別:
- 定義介面
package com.chenqa.springaop.example.service;
public interface BankService {
/**
* 模擬的銀行轉賬
* @param from 出賬人
* @param to 入賬人
* @param account 轉賬金額
* @return
*/
public boolean transfer(String form, String to, double account);
}
- 編寫實現類
package com.chenqa.springaop.example.service.impl;
import com.chenqa.springaop.example.service.BankService;
public class BCMBankServiceImpl implements BankService {
public boolean transfer(String form, String to, double account) {
if(account<100) {
throw new IllegalArgumentException("最低轉賬金額不能低於100元");
}
System.out.println(form+"向" +to+"交行賬戶轉賬"+account+"元");
return false;
}
}
- 修改spring配置檔案,新增以下內容:
<!-- bankService bean -->
<bean id="bankService" class="com.chenqa.springaop.example.service.impl.BCMBankServiceImpl"/>
<!-- 切面 -->
<bean id="myAspect" class="com.chenqa.springaop.example.aspect.MyAspect"/>
<!-- aop配置 -->
<aop:config>
<aop:aspect ref="myAspect">
<aop:pointcut expression="execution(* com.chenqa.springaop.example.service.impl.*.*(..))" id="pointcut"/>
<aop:before method="before" pointcut-ref="pointcut"/>
<aop:after method="after" pointcut-ref="pointcut"/>
<aop:after-returning method="afterReturning" pointcut-ref="pointcut"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut"/>
<aop:around method="around" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
- 編寫測試程式
ApplicationContext context = new ClassPathXmlApplicationContext("spring-aop.xml");
BankService bankService = context.getBean("bankService", BankService.class);
bankService.transfer("張三", "李四", 200);
執行後輸出:
將測試程式中的200改成50,再執行後輸出:
通過測試結果可以看出,五種通知的執行順序為: 前置通知→環繞通知→正常返回通知/異常返回通知→返回通知,可以多次執行來檢視。