6

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

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzU4NzA3MTc5Mg%3D%3D&mid=2247483821&idx=1&sn=e9003410a8d3c8a092de0c4d2002bedd&scene=21%23wechat_redirect
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

Original 3y 对线面试官 2020-12-21
收录于话题 #对线面试官 38个内容
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg
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);
  }
}
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg
@Around("@annotation(com.sanwai.service.openapi.monitor.Monitor)")
public Object antispan(ProceedingJoinPoint pjp) throws Throwable {

String functionName = pjp.getSignature().getName();
    Map<String, String> 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;
}
640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=jpeg

文章以纯面试的角度去讲解,所以有很多的细节是未铺垫的。

比如说反射、.java文件到jvm的过程、AOP是什么等等等基础...这些在【Java3y】都有过详细的基本教程甚至电子书,我就不再详述了。

注解可以把它当做是配置的载体,可能在运行时、可能在编译过程中解析注解,实现些方便好用的功能。

欢迎关注我的微信公众号【面试造火箭】来聊聊Java面试
640?wx_fmt=jpeg

添加我的微信【sanwaiyihao】进一步交流和学习

640?wx_fmt=png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK