当前位置: 首页 > news >正文

网站建设 千助网站打开的速度很慢应该怎么做

网站建设 千助,网站打开的速度很慢应该怎么做,58同城长沙回收网站建设,中国建设教育协会的是假网站吗原理 AOP#xff1a;面向切面编程#xff08;spring AOP#xff09; ThreadLocal#xff1a;实现线程范围内的局部变量#xff0c;即ThreadLocal在一个线程中是共享的#xff0c;在不同线程之间是隔离的。ThreadLocal 自定义注解#xff1a;自定义注解 代码实现 自定… 原理 AOP面向切面编程spring AOP ThreadLocal实现线程范围内的局部变量即ThreadLocal在一个线程中是共享的在不同线程之间是隔离的。ThreadLocal 自定义注解自定义注解 代码实现 自定义注解 package com.dd.controller.log;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface LogAnnotation {/*** 日志名称*/String description() default ;/*** 日志操作类型*/String type();} 日志切面 package com.dd.controller.log;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.core.NamedThreadLocal; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.util.Date; import java.util.HashMap; import java.util.Map;Aspect Component Slf4j public class LogAspect {private static final ThreadLocalDate beginTimeThreadLocal new NamedThreadLocalDate(ThreadLocal beginTime);/*** Controller层切点,注解方式*/Pointcut(annotation(com.dd.controller.log.LogAnnotation))public void controllerAspect() {}/*** 前置通知 (在方法执行之前返回)用于拦截Controller层记录用户的操作的开始时间** param joinPoint 切点* throws InterruptedException*/Before(controllerAspect())public void doBefore(JoinPoint joinPoint) throws InterruptedException {//线程绑定变量该数据只有当前请求的线程可见Date beginTime new Date();beginTimeThreadLocal.set(beginTime);log.info(前置通知 开始时间 beginTime);}/*** 后置通知(在方法执行之后返回) 用于拦截Controller层操作** param joinPoint 切点*/After(controllerAspect())public void after(JoinPoint joinPoint) {try {Object[] objs joinPoint.getArgs();if (objs ! null objs.length 0) {for (Object object : objs) {if (object instanceof HttpServletRequest) {break;}}}String logName getControllerMethodInfo(joinPoint).get(description).toString();String logType getControllerMethodInfo(joinPoint).get(type).toString();//请求开始时间long beginTime beginTimeThreadLocal.get().getTime();long endTime System.currentTimeMillis();log.info(后置通知结束时间{}, logName:{}, logType:{} , endTime, logName, logType);//请求耗时Long logElapsedTime endTime - beginTime;log.info(接口耗时 endTime);} catch (Exception e) {log.error(AOP后置通知异常, e);}}/*** 获取注解中对方法的描述信息 用于Controller层注解** param joinPoint 切点* return 方法描述* throws Exception*/public static MapString, Object getControllerMethodInfo(JoinPoint joinPoint) throws Exception {MapString, Object map new HashMapString, Object(16);//获取目标类名String targetName joinPoint.getTarget().getClass().getName();//获取方法名String methodName joinPoint.getSignature().getName();//获取相关参数Object[] arguments joinPoint.getArgs();//生成类对象Class targetClass Class.forName(targetName);//获取该类中的方法Method[] methods targetClass.getMethods();String description ;String type null;for (Method method : methods) {if (!method.getName().equals(methodName)) {continue;}Class[] clazzs method.getParameterTypes();if (clazzs.length ! arguments.length) {//比较方法中参数个数与从切点中获取的参数个数是否相同原因是方法可以重载哦continue;}description method.getAnnotation(LogAnnotation.class).description();type method.getAnnotation(LogAnnotation.class).type();map.put(description, description);map.put(type, type);}return map;}} package com.dd.controller.log; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.core.NamedThreadLocal; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.util.Date; import java.util.HashMap; import java.util.Map; Aspect Component Slf4j public class LogAspect { private static final ThreadLocalDate beginTimeThreadLocal new NamedThreadLocalDate(ThreadLocal beginTime);/*** Controller层切点,注解方式*/ Pointcut(annotation(com.dd.controller.log.LogAnnotation)) public void controllerAspect() {}/*** 前置通知 (在方法执行之前返回)用于拦截Controller层记录用户的操作的开始时间** param joinPoint 切点* throws InterruptedException*/ Before(controllerAspect()) public void doBefore(JoinPoint joinPoint) throws InterruptedException {//线程绑定变量该数据只有当前请求的线程可见Date beginTime new Date();beginTimeThreadLocal.set(beginTime);log.info(前置通知 开始时间 beginTime); }/*** 后置通知(在方法执行之后返回) 用于拦截Controller层操作** param joinPoint 切点*/ After(controllerAspect()) public void after(JoinPoint joinPoint) {try {Object[] objs joinPoint.getArgs();if (objs ! null objs.length 0) {for (Object object : objs) {if (object instanceof HttpServletRequest) {break;}}}String logName getControllerMethodInfo(joinPoint).get(description).toString();String logType getControllerMethodInfo(joinPoint).get(type).toString();//请求开始时间long beginTime beginTimeThreadLocal.get().getTime();long endTime System.currentTimeMillis();log.info(后置通知结束时间{}, logName:{}, logType:{} , endTime, logName, logType);//请求耗时Long logElapsedTime endTime - beginTime;log.info(接口耗时 endTime);} catch (Exception e) {log.error(AOP后置通知异常, e);} }/*** 获取注解中对方法的描述信息 用于Controller层注解** param joinPoint 切点* return 方法描述* throws Exception*/ public static MapString, Object getControllerMethodInfo(JoinPoint joinPoint) throws Exception {MapString, Object map new HashMapString, Object(16);//获取目标类名String targetName joinPoint.getTarget().getClass().getName();//获取方法名String methodName joinPoint.getSignature().getName();//获取相关参数Object[] arguments joinPoint.getArgs();//生成类对象Class targetClass Class.forName(targetName);//获取该类中的方法Method[] methods targetClass.getMethods();String description ;String type null;for (Method method : methods) {if (!method.getName().equals(methodName)) {continue;}Class[] clazzs method.getParameterTypes();if (clazzs.length ! arguments.length) {//比较方法中参数个数与从切点中获取的参数个数是否相同原因是方法可以重载哦continue;}description method.getAnnotation(LogAnnotation.class).description();type method.getAnnotation(LogAnnotation.class).type();map.put(description, description);map.put(type, type);}return map; }} 引用注解 LogAnnotation(description 测试接口, type 测试)GetMapping(/test)public void test() throws Exception {}效果
http://www.hkea.cn/news/14594445/

相关文章:

  • 室内设计网站免费素材网站推广策划方案毕业设计
  • 纪检部门网站举报建设设计公司网站怎么做
  • 网站维护中页面代码企业网站的建设目的有什么
  • 上海电子门户网站建设数据前端页面设计图
  • 网站后台如何修改文字做自媒体发视频用哪些网站
  • 做司法考试题目的网站网站优化与推广
  • 深圳建网站哪个济南兴田德润有活动吗58网站建设58xiamen
  • ui设计师怎么做自己的网站苏州住建
  • 如何看网站的流量网站建设要学哪些
  • 999网站免费工信部信息备案网站查询系统
  • 印度域名注册网站网络品牌策划
  • 网站建设与优化推广方案如何建企业网站
  • 百度网站建设微信封面wordpress 审核用户
  • dede5.7微电影网站模板铁路最好的5个专业学校
  • 企业网络推广网站建设广东哪家网站建
  • 二手房中介网站模板wordpress屏蔽f12
  • 常见的域名注册网站溧阳网站设计
  • 福建省效能建设网站前端培训学校
  • 网站建设的意义和作用企业网盘哪个最好用
  • vps 上传网站广告传媒公司名字
  • 大连建设工程信息网下载中心酒泉网站建设优化
  • 做网站业务的怎么寻找客户网站开发适配
  • 网站建设平台软件企业vi设计图片
  • 武功网站开发php网站开发设计论文
  • 电商网站详细设计网站建设 制作教程
  • 地方网站的建设北京工程信息网
  • 做外贸最好的网站有哪些深圳网站设计x
  • 旅游酒店网站建设域名一定要备案吗
  • 网站开发管理制度wordpress百度xml地图
  • 网站每年续费费用个人简历免费制作网站