使用aspectj注解埋點(diǎn)

這個(gè)是弄著玩的,使用的范圍比較局限, 寫出來(lái)也比較雞肋,我只是想把這個(gè)過(guò)程記下來(lái)。
aop都知道是代碼插裝,即在方法前后增加一些額外的代碼,我們的代碼中有大量的埋點(diǎn),能否用aop以注解的方式插入埋點(diǎn),即在我們需要的方法前添加注解,執(zhí)行到該方法的時(shí)候發(fā)出埋點(diǎn)。

1.定義注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface Analyse {
    String cid();
    String act();
    String lab();
}

定義的是編譯時(shí)注解,只能使用在方法上,包含三個(gè)字段就是我們?cè)诼顸c(diǎn)時(shí)需要需要使用的。

@Aspect
public final class AnalyseInsert {

    @Around("execution(@com.sankuai.moviepro.common.aop.analy.Analyse * *(..))")
    public Object analyseInsert(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        Analyse auth = method.getAnnotation(Analyse.class);
        String lab = auth.lab();
        if(TextUtils.isEmpty(lab)){
            AnalyseUtils.analyseEvent(null,auth.cid(),auth.act());
        } else {
            AnalyseUtils.analyseEvent(null,auth.cid(),auth.act(),auth.lab());
        }
        Object object = joinPoint.proceed();
        return object;
    }

}

使用around注解表示所有注解了Analyse的方法都插裝代碼,然后就是獲取注解中的參數(shù)再發(fā)出埋點(diǎn)。ok

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容