我凭Java注解竟吊打面试官!

106 阅读1分钟

今天面试官考我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<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;    }

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

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