【对线面试官】今天来聊聊Java注解



public void send(String userName) {
  try {
    // qps 上报
    qps(params);
    long startTime = System.currentTimeMillis();
    // 构建上下文(模拟业务代码)
    ProcessContext processContext = new ProcessContext();
    UserModel userModel = new UserModel();
    userModel.setAge("22");
    userModel.setName(userName);
    //...
    // rt 上报
    long endTime = System.currentTimeMillis();
    rt(endTime - startTime);
  } catch (Exception e) {
    
    // 出错上报
    error(params);
  }
}





@Around("@annotation(com.sanwai.service.openapi.monitor.Monitor)")
public Object antispan(ProceedingJoinPoint pjp) throws Throwable {
    String functionName = pjp.getSignature().getName();
    Map tags = new HashMap<>();
    logger.info(functionName);
    tags.put("functionName", functionName);
    tags.put("flag", "done");
    monitor.sum(functionName, "start", 1);
    //方法执行开始时间
    long startTime = System.currentTimeMillis();
    Object o = null;
    try {
        o = pjp.proceed();
    } catch (Exception e) {
        //方法执行结束时间
        long endTime = System.currentTimeMillis();
        tags.put("flag", "fail");
        monitor.avg("rt", tags, endTime - startTime);
        monitor.sum(functionName, "fail", 1);
        throw e;
    }
    //方法执行结束时间
    long endTime = System.currentTimeMillis();
    monitor.avg("rt", tags, endTime - startTime);
    if (null != o) {
        monitor.sum(functionName, "done", 1);
    }
    return o;
}
 


文章以纯面试的角度去讲解,所以有很多的细节是未铺垫的。
比如说反射、.java文件到jvm的过程、AOP是什么等等等基础...这些在【Java3y】都有过详细的基本教程甚至电子书,我就不再详述了。
注解可以把它当做是配置的载体,可能在运行时、可能在编译过程中解析注解,实现些方便好用的功能。
添加我的微信【sanwaiyihao】进一步交流和学习
评论
