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

免费建网站最新视频教程2m带宽可以做音乐网站

免费建网站最新视频教程,2m带宽可以做音乐网站,黄冈网站建设的方案,网站建设及第三方支付目录 前言#xff1a; 正文 一.Spring AOP 1.JDK动态代理 2.Cglib动态代理 使用AOP主要的应用场景#xff1a; SpringBoot通过自定义注解实现日志打印 一.Maven依赖 二.ControllerMethodLog.class自定义注解 三.Spring AOP切面方法的执行顺序 四.ControllerMethodL…目录 前言 正文 一.Spring AOP 1.JDK动态代理 2.Cglib动态代理 使用AOP主要的应用场景 SpringBoot通过自定义注解实现日志打印 一.Maven依赖 二.ControllerMethodLog.class自定义注解 三.Spring AOP切面方法的执行顺序 四.ControllerMethodLogAspect.class:用于打印日志的切面定义类 前言 在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的​​Bug​​​,特别是在开发​​Controller​​​层的接口时我们一般会打印出​​Request​​​请求参数和​​Response​​响应结果但是如果这些打印日志的代码相对而言还是比较重复的那么我们可以通过什么样的方式来简化日志打印的代码呢 正文 一.Spring AOP Spring AOP 即面向切面是对​​OOP​​​面向对象的一种延伸。​​​AOP​​​机制可以让开发者把业务流程中的通用功能抽取出来单独编写功能代码。在业务流程执行过程中​​Spring​​框架会根据业务流程要求自动把独立编写的功能代码切入到流程的合适位置。 Spring AOP的实现方式 1.JDK动态代理 类对象必须实现接口​​JDK​​​动态代理背后是借助​​Java​​​多态的特性因为​​JDK​​​动态代理生成的​​class​​​文件已经继承了​​Proxy​​​而​​Java​​​是单继承的不能继承目标对象只能实现目标对象涉及向上转型所以是基于​​JDK​​动态代理是基于接口的。 ​​JDK​​动态代理主要涉及两个类 ​​InvocationHandler​​是一个接口通过实现该接口定义横切逻辑并通过反射机制调用目标类的代码动态将横切逻辑和业务逻辑编制在一起。​​Proxy​​​ 利用 ​​InvocationHandler​​ 动态创建 一个符合某一接口的实例生成目标类的代理对象。 2.Cglib动态代理 ​​Cglib​​​是一个强大的高性能高质量的代码生成类库 可以在运行期扩展 ​​Java​​​ 类与实现 ​​Java​​​ 接口​​CgLib​​​ 封装了​​asm​​​可以再运行期动态生成新 的 ​​class​​。 特别要注意的是 目标类实现接口的情况下使用​​JDK​​​动态代理没有实现接口的情况下使用​​Cglib​​动态代理。可以使用​​ProxyTargetClass true​​​,强制所有都使用​​Cglib​​动态代理。​​Cglib​​​所创建的动态代理对象在实际运行时候的性能要比​​JDK​​​动态代理高不少有研究表明大概要高10倍但是​​Cglib​​​在创建对象的时候所花费的时间却比​​JDK​​动态代理要多很多有研究表明大概有8倍的差距对于​​singleton​​​的代理对象或者具有实例池的代理因为无需频繁的创建代理对象所以比较适合采用​​Cglib​​​动态代理反正则比较适用​​JDK​​动态代理。 使用AOP主要的应用场景 ​​Authentication​​ 权限检查​​Caching​​ 缓存​​Context passing​​ 内容传递​​Error handling​​ 错误处理​​Lazy loading​​ 延迟加载​​Debugging​​ 调试​​logging, tracing, profiling and monitoring​​日志记录跟踪优化校准​​Performance optimization​​性能优化效率检查​​Persistence​​ 持久化​​Resource pooling​​资源池​​Synchronization​​同步​​Transactions​​ 事务管理 SpringBoot通过自定义注解实现日志打印 一.Maven依赖 !--lombok-- dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.2/versionoptionaltrue/optional /dependency!--Spring AOP-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency二.ControllerMethodLog.class自定义注解 ​​Retention​​: 用来修饰注解是注解的注解称为元注解。 ​​Target​​:用来说明对象的作用范围 ​​Documented​​:用来做标记使用 /** * 自定义注解用于打印Controller层方式日志 */ Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) public interface ControllerMethodLog { } 这里特别讲一下​​Retention​​按生命周期来划分可分为3类 ​​RetentionPolicy.SOURCE​​​注解只保留在源文件当​​Java​​​文件编译成​​class​​文件的时候注解被遗弃运行时去动态获取注解信息​​RetentionPolicy.CLASS​​​注解被保留到​​class​​​文件但​​jvm​​​加载​​class​​文件时候被遗弃这是默认的生命周期在编译时进行一些预处理操作​​RetentionPolicy.RUNTIME​​​注解不仅被保存到​​class​​​文件中​​jvm​​​加载​​class​​文件之后仍然存在做一些检查性的操作 这3个生命周期分别对应于​​Java​​​源文件(​​.java​​​文件) — ​​.class​​文件 — 内存中的字节码。 三.Spring AOP切面方法的执行顺序 这里简单介绍一下切面的执行方法和其执行顺序 ​​Around​​ 通知方法将目标方法封装起来​​Before​​ 通知方法会在目标方法调用之前执行​​After​​ 通知方法会在目标方法返回或者异常后执行​​AfterReturning​​ 通知方法会在目标方法返回时执行​​Afterthrowing​​ 通知方法会在目标方法抛出异常时执行 这里以一个返回正常的情况为例异常替换最后一步即可 四.ControllerMethodLogAspect.class:用于打印日志的切面定义类 注意要在启动类扫描这个​​class​​​并且添加 ​​EnableAspectJAutoProxy(proxyTargetClass true)​​ Slf4j Component Aspect public class ControllerMethodLogAspect {Pointcut(annotation(com.xiyuan.demo.annotation.ControllerMethodLog))public void pointCut() {}/*** 在切点运行前执行该方法*/Before(pointCut())public void doBefore(JoinPoint joinPoint) {MethodSignature signature (MethodSignature) joinPoint.getSignature();Method method signature.getMethod();ControllerMethodLog annotation method.getAnnotation(ControllerMethodLog.class);if (Objects.isNull(annotation)) {return;}String methodName method.getDeclaringClass().getSimpleName() . method.getName();log.info(start {}入参{}, methodName, JSON.toJSONString(joinPoint.getArgs()));}/*** 在切点运行后,无异常时执行该方法** param joinPoint* param result*/AfterReturning(value pointCut(), returning result)public void afterReturn(JoinPoint joinPoint, Object result) {MethodSignature signature (MethodSignature) joinPoint.getSignature();Method method signature.getMethod();ControllerMethodLog annotation method.getAnnotation(ControllerMethodLog.class);if (Objects.isNull(annotation)) {return;}String methodName method.getDeclaringClass().getSimpleName() . method.getName();log.info(end {}响应{}, methodName, JSON.toJSONString(result));}}验证 getUserById根据id获取用户的信息 GetMapping(/getUserById) ApiOperation(value 根据用户id获取用户) ControllerMethodLog public ResponseResult getUserById(RequestParam(name id, required true) String id) {UserInfoPojo userInfoPojo userService.getUserById(id);return ResponseResult.success(userInfoPojo, ConstantsUtil.QUERY_SUCCESS); }Swagger接口信息如下 IDEA控制台打印信息如下
http://www.hkea.cn/news/14286307/

相关文章:

  • jsp做的当当网站的文档长春房产网
  • 西安网站建设交易百度指数购买
  • 做自行车车队网站的名字东莞室内设计公司
  • 自助建站编辑器比较好的做外贸网站
  • 求一个dw做的网站长春专业网站推广
  • 不同类型网站栏目设置区别企业网站建设平台
  • 百度网站前面的图片qq是用什么开发的
  • 把一个网站挂到网上要怎么做网站设计推广方案
  • 廉江网站制作宁波网站制作出售
  • 做网站需要哪些东西和步骤租房网站那些地图区域统计怎么做的
  • 开个网站平台要多少钱网站后台无法上传附件
  • 在线旅游网站建设方案商城网站设计价格
  • 昆明品牌网站建设永康建设网站
  • xampp wordpress 建站教程企业网站建设排名推荐
  • 永州网站建设公司推荐wordpress建cms
  • 公司网站建设报价王野天葛优
  • 绍兴网站建设方案推广外贸流程询盘
  • 梧州论坛最新消息门户网站优化怎么做
  • 网页设计素材网站wordpress文章审核发邮件
  • 订餐网站开发流程备案怎么关闭网站吗
  • 申报湖南创新型省份建设专项网站保定网站建设哪家好
  • 建设银行公积金网站提示udun网站突然找不到了 然后降权重 排名不变
  • 网站站外优化推广方式网站对企业的重要性
  • 新都有没有做网站的网站建设云创
  • 北京网站推广|网站制作|网络推广|网站建设多个招聘网站格式不一致如何做招聘记录
  • 唐山制作网站公司北京快三平台
  • 手机模板网站模板下载网站网站打开速度太慢
  • 可以做装修效果图的网站有哪些手机网站建设解决方案
  • 临沭县住房和城乡建设局网站一家专门做特卖的网站是什么
  • 网站怎么查哪家公司做的代理网页游戏代理