发表于: 2018-05-20 22:53:25

1 1194


今天完成的事情:完成aop的实现类

controller的:

public class TimeController {
// 日志
  private static Logger logger = LoggerFactory.getLogger(TimeController.class);
  /**
   * @Description: 定义切入点
   * @Param: timer
   * @return: void
   * @Explain: com.jnshu.controller.*Controller*.* 切入所有controller包下类名包含Controller的类的所有方法
   */
  @Pointcut(value = "execution(* com.mvc.controller.*Controller*.*(..))")
private void handlerTimer(){}

/**
   * @Description: 环绕通知
   * @Param: controllerLogTimer
   * @return: java.lang.Object
   * @Explain: handlerTimer() 代表使用 handlerTimer()的切点
   */
  @Around(value = "handlerTimer()")
public Object controllerLogTimer(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 创建性能监控信息类
     MonitorTime monitorTime = new MonitorTime();
     // 获取目标类名
     String clazzName = proceedingJoinPoint.getTarget().getClass().getName();
     // 获取目标方法名
     String methodName = proceedingJoinPoint.getSignature().getName();

     // 记录目标类名
     monitorTime.setClassName(clazzName);
     // 记录目标方法名
     monitorTime.setMethodName(methodName);
     // 记录开始时间
     monitorTime.setLogTime(new Date());

     // 计时并调用目标函数
     logger.debug("====Controller切面开始====");
     // System.currentTimeMillis() 返回当前时间,单位毫秒ms
     long start = System.currentTimeMillis();
     // 执行代理类
     Object result = proceedingJoinPoint.proceed();
     long time = System.currentTimeMillis() -start;
     monitorTime.setComsumeTime(time);
     logger.info( "性能日志 Controller类 " + "响应时间: " + monitorTime.getComsumeTime() + "ms " + "执行信息: 执行 " + monitorTime.getClassName()+" 中方法 "+monitorTime.getMethodName() + " 执行时间: " + monitorTime.getLogTime() );
     return result;
  }
}

service的:

@Aspect
public class TimeUserService {

private static Logger logger = LoggerFactory.getLogger(TimeUserService.class);

  // db接口测试
  @Pointcut("execution(* com.mvc.service.PersonService.*(..))")
private void userServiceTimer(){}

/**
   * @Description:  UserService 接口环绕通知
   * @Param: dbLogTimer
   * @return: java.lang.Object
   */
  @Around(value = "userServiceTimer()")
public Object dbLogTimer (ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

// 创建性能监控信息类
     MonitorTime monitorTime = new MonitorTime();
     // 获取目标类名
     String clazzName = proceedingJoinPoint.getTarget().getClass().getName();
     // 获取目标方法名
     String methodName = proceedingJoinPoint.getSignature().getName();

     // 记录目标类名
     monitorTime.setClassName(clazzName);
     // 记录目标方法名
     monitorTime.setMethodName(methodName);
     // 记录开始时间
     monitorTime.setLogTime(new Date());

     // 计时并调用目标函数
     logger.debug("=== UserService接口切面开始 ===");
     // 毫秒为单位的当前时间
     long start = System.currentTimeMillis();
     Object result = proceedingJoinPoint.proceed();
     long time = System.currentTimeMillis() -start;
     monitorTime.setComsumeTime(time);
     logger.info( "性能日志 DB类 " + "响应时间: " + monitorTime.getComsumeTime() + "ms " + "执行信息: 执行 " + monitorTime.getClassName()+" 中方法 "+monitorTime.getMethodName() + " 执行时间: " + monitorTime.getLogTime() );
     return result;
  }
}

明天计划的事情:(跑通日志过滤,完成任务三) 
遇到的问题:(遇到什么困难,怎么解决的) 
收获:(通过今天的学习,学到了什么知识)



最后,劳烦师兄批阅


返回列表 返回列表
评论

    分享到