W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面章節(jié)我們看到了使用 Hasor 進(jìn)行 Aop 開發(fā)的一個(gè)簡單例子。Hasor 提供的 @Aop 注解不光可以標(biāo)記到類上,它還可以標(biāo)記在方法上。
如果 @Aop 標(biāo)記到類上,那么 Aop 攔截器將會對整個(gè)類的 public、protected 方法生效,這叫做類級攔截器。
類級攔截器的例子這里展示一下它的特征代碼:
@Aop(SimpleInterceptor.class)
public class AopBean {
public String echo(String sayMessage) {
return "echo :" + sayMessage;
}
}
有時(shí)候我們不想攔截所有方法,只想對有限的幾個(gè)方法做 Aop 攔截。這個(gè)時(shí)候就會用到 Hasor 的方法級攔截器,還是以上面的 AopBean 為例,假設(shè)我們有兩個(gè)方法。我們只想攔截 echo 方法調(diào)用,那么可以這樣:
public class AopBean {
public String print() {
...
}
@Aop(SimpleInterceptor.class)
public String echo(String sayMessage) {
return "echo :" + sayMessage;
}
}
我們可以看出,方法級攔截器和類級攔截器的唯一區(qū)別就是 @Aop 注解放到方法上而不是類上。
沒錯(cuò)就這么簡單。
假定我們希望在產(chǎn)品開發(fā)完畢之后,想檢測一下方法的覆蓋率。最簡單的一種方式就是開發(fā)一些全局 Aop 每當(dāng)方法調(diào)用時(shí)將方法名記錄下來。這樣經(jīng)過一段時(shí)間運(yùn)行之后只要沒有調(diào)用過的方法都可能是無用的方法?;蛘哌€沒有觸發(fā)相關(guān)業(yè)務(wù)場景。接下來我們來講解一下如何在 Hasor 中聲明一個(gè)全局?jǐn)r截器。
首先全局?jǐn)r截器是一種比較重量級的攔截器,它相當(dāng)于為所有類都做了一層 Aop。如果沒有控制好性能,很容易因?yàn)槿謹(jǐn)r截器拖垮整個(gè)應(yīng)用的性能。
因此為了安全起見,Hasor 并沒有提供任何注解方式聲明全局 Aop 的途徑。如果您想使用全局?jǐn)r截器就要在 Module 中自己進(jìn)行特別聲明,例如如下代碼就是將 SimpleInterceptor 作為全局?jǐn)r截器進(jìn)行聲明。
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號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: