使用aspectj注解埋点


这个是弄着玩的,使用的范围比较局限, 写出来也比较鸡肋,我只是想把这个过程记下来。 aop都知道是代码插装,即在方法前后增加一些额外的代码,我们的代码中有大量的埋点,能否用aop以注解的方式插入埋点,即在我们需要的方法前添加注解,执行到该方法的时候发出埋点。

###1.定义注解

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

定义的是编译时注解,只能使用在方法上,包含三个字段就是我们在埋点时需要需要使用的。

@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的方法都插装代码,然后就是获取注解中的参数再发出埋点。ok



本作品由 Tony Zhang 创作,采用 CC BY-NC-SA 3.0 许可协议 进行许可。

Comments