W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
前面章節(jié)我們看到了使用 Hasor 進行 Aop 開發(fā)的一個簡單例子。Hasor 提供的 @Aop 注解不光可以標記到類上,它還可以標記在方法上。
如果 @Aop 標記到類上,那么 Aop 攔截器將會對整個類的 public、protected 方法生效,這叫做類級攔截器。
類級攔截器的例子這里展示一下它的特征代碼:
@Aop(SimpleInterceptor.class)
public class AopBean {
public String echo(String sayMessage) {
return "echo :" + sayMessage;
}
}
有時候我們不想攔截所有方法,只想對有限的幾個方法做 Aop 攔截。這個時候就會用到 Hasor 的方法級攔截器,還是以上面的 AopBean 為例,假設我們有兩個方法。我們只想攔截 echo 方法調用,那么可以這樣:
public class AopBean {
public String print() {
...
}
@Aop(SimpleInterceptor.class)
public String echo(String sayMessage) {
return "echo :" + sayMessage;
}
}
我們可以看出,方法級攔截器和類級攔截器的唯一區(qū)別就是 @Aop 注解放到方法上而不是類上。
沒錯就這么簡單。
假定我們希望在產品開發(fā)完畢之后,想檢測一下方法的覆蓋率。最簡單的一種方式就是開發(fā)一些全局 Aop 每當方法調用時將方法名記錄下來。這樣經過一段時間運行之后只要沒有調用過的方法都可能是無用的方法。或者還沒有觸發(fā)相關業(yè)務場景。接下來我們來講解一下如何在 Hasor 中聲明一個全局攔截器。
首先全局攔截器是一種比較重量級的攔截器,它相當于為所有類都做了一層 Aop。如果沒有控制好性能,很容易因為全局攔截器拖垮整個應用的性能。
因此為了安全起見,Hasor 并沒有提供任何注解方式聲明全局 Aop 的途徑。如果您想使用全局攔截器就要在 Module 中自己進行特別聲明,例如如下代碼就是將 SimpleInterceptor 作為全局攔截器進行聲明。
public class MyModule implements Module {
public void loadModule(ApiBinder apiBinder) throws Throwable {
//1.任意類
Matcher<Class<?>> atClass = AopMatchers.anyClass();
//2.任意方法
Matcher<Method> atMethod = AopMatchers.anyMethod();
//3.注冊攔截器讓@MyAop注解生效
apiBinder.bindInterceptor(atClass, atMethod, new SimpleInterceptor());
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: