Hasor Aop攔截方法調(diào)用

2018-10-02 10:34 更新

在一個(gè)已經(jīng)存在的方法上,如果我們想附加一些行為。這個(gè)時(shí)候最有力的方式就是通過(guò) Aop。下面這段代碼就是給我們 TradeService 類增加 aop 的例子。

@Aop(CountInterceptor.class)
public class TradeService {
    public boolean subStore(long itemId , int count){
        ...
    }
}


接下來(lái)我們要編寫自己的 Aop 切面代碼。在 Hasor 中 Aop 的工作原理類似于攔截器,您可以配置一個(gè)或多個(gè) Aop切面。如果是多個(gè) Aop 切面,它們會(huì)被組裝成攔截器的形式執(zhí)行鏈?zhǔn)秸{(diào)用。

public class CountInterceptor implements MethodInterceptor {
    public Object invoke(MethodInvocation invocation) throws Throwable {
        try {
            System.out.println("before... " + invocation.getMethod().getName());
            Object returnData = invocation.proceed();
            System.out.println("after...");
            return returnData;
        } catch (Exception e) {
            System.out.println("throw...");
            throw e;
        }
    }
}


上面的Aop例子是做用到整個(gè)類上的,如果我們只想對(duì)某一個(gè)方法做 Aop 而不是一整個(gè)類。那么可以把 @Aop 注解標(biāo)記到方法上而非類上,這樣 Aop切面 將只會(huì)在這個(gè)方法上起效。您不必編寫復(fù)雜的匹配表達(dá)式:例如:

public class TradeService {
    @Aop(CountInterceptor.class)
    public boolean subStore(long itemId , int count);
}


您也可以在類和方法上都標(biāo)記上 Aop切面,Hasor 遇到這種情況會(huì)自動(dòng)按照(類優(yōu)先于方法)的規(guī)則執(zhí)行您的 Aop 切面。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)