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

哈尔滨h5建站龙之向导外贸网址

哈尔滨h5建站,龙之向导外贸网址,昆山网站建设义搏,网站被挂黑后果目录 1. 以增加方法执行时间为例使用AOP 1.1 引入AOP依赖 1.2 编写AOP程序 2. AOP的重要概念 3. AOP通知类型与通知方法标注 3.1 在通知方法前使用对应注解 3.2 使用Pointcut注解提取公共切点表达式 3.3 跨类使用切点 3.4 切面类排序 1. 以增加方法执行时间为例使用AO…目录 1. 以增加方法执行时间为例使用AOP 1.1 引入AOP依赖 1.2 编写AOP程序 2. AOP的重要概念 3. AOP通知类型与通知方法标注 3.1 在通知方法前使用对应注解 3.2 使用Pointcut注解提取公共切点表达式 3.3 跨类使用切点 3.4 切面类排序 1. 以增加方法执行时间为例使用AOP 1.1 引入AOP依赖 在pom.xml中增加关于AOP的配置 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency 1.2 编写AOP程序 以图书管理系统为例为每个方法增加耗时计算与日志打印。 创建aspect包在其下创建TimeAspect类 package com.example.bookmanagementsystem.aspect;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component;Aspect Slf4j Component public class TimeAspect {Around(execution(* com.example.bookmanagementsystem.controller.*.*(..)))public Object timeCost(ProceedingJoinPoint joinPoint) throws Throwable {long startSystem.currentTimeMillis();// 执行目标方法Object resultjoinPoint.proceed();long endSystem.currentTimeMillis();log.info(joinPoint消耗时间(end-start)ms);return result;} }关于注解 1、Aspect表示该类是一个切面类 2、Around用于指明切面类的作用域与作用方式在哪个环节对哪些方法 关于切面类成员方法 1、timeCost方法的参数是一个ProceedingJoinPoint类型的对象表示目标方法 2、代码被分为三大部分 2. AOP的重要概念 1、切点一组通过表达式描述的规则 2、连接点切面作用/描述的方法即被AOP控制的目标方法 3、通知具体要做处理的逻辑 4、切面切点通知即切面一个类可以有多个切面 以上述切面类为例 3. AOP通知类型与通知方法标注 1、Around环绕通知此注解标注的通知方法在目标方法前、后都被执行最常用 2、Before前置通知此注解标注的通知方法在目标方法前被执行 3、After 后置通知此注解标注的通知方法在目标方法后被执行无论是否发生异常都会执行 4、AfterReturning 返回后通知此注解标注的通知方法在目标方法后被执行有异常不会执行 5、AfterThrowing异常后通知此注解标注的通知方法在异常后被执行 3.1 在通知方法前使用对应注解 现在controller包下创建一个HelloController类编写方法作为目标方法 由于AfterReturning与AfterThrowing标注的方法在异常发生与否时返回不同故编写两个方法使其满足一个正常运行一个运行时报异常 package com.zhouyou.demos.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController public class HelloController {RequestMapping(/test1)public String test1(){return hello;}RequestMapping(/test2)public int test2(){return 10/0;} }在aspect包下创建TestAspect类用于编写通知方法 package com.zhouyou.demos.aspect;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component;Aspect Slf4j Component public class AspectDemo {Around(execution(* com.zhouyou.demos.controller.*.*(..)))public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {log.info(AspectDemo around 前);Object resultjoinPoint.proceed();log.info(AspectDemo around 后);return result;}Before(execution(* com.zhouyou.demos.controller.*.*(..)))public void doBefore(){log.info(AspectDemo before);}After(execution(* com.zhouyou.demos.controller.*.*(..)))public void doAfter(){log.info(AspectDemo after);}AfterReturning(execution(* com.zhouyou.demos.controller.*.*(..)))public void doAfterReturning(){log.info(AspectDemo afterReturning);}AfterThrowing(execution(* com.zhouyou.demos.controller.*.*(..)))public void doAfterThrowing(){log.info(AspectDemo afterThrowing);} }启动项目依次根据路由映射访问test1方法和test2方法可查看日志观察通知方法执行顺序 3.2 使用Pointcut注解提取公共切点表达式 上述使用方法中在使用对应注解标注通知方法时需要重复编写公共切点表达式这很不方便 可使用Pointcut提取公共切点表达式在后续使用公共切点表达式时则直接使用Pointcut标注的方法名即可 修改3.1中的代码 package com.zhouyou.demos.aspect;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component;Aspect Slf4j Component public class AspectDemo {Pointcut(execution(* com.zhouyou.demos.controller.*.*(..)))private void pc(){}Around(pc())public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {log.info(AspectDemo around 前);Object resultjoinPoint.proceed();log.info(AspectDemo around 后);return result;}Before(pc())public void doBefore(){log.info(AspectDemo before);}After(pc())public void doAfter(){log.info(AspectDemo after);}AfterReturning(pc())public void doAfterReturning(){log.info(AspectDemo afterReturning);}AfterThrowing(pc())public void doAfterThrowing(){log.info(AspectDemo afterThrowing);} }3.3 跨类使用切点 现在aspect包中再创建一个切面类aspectDemo2以Before为例使用aspectDemo的切点。 package com.zhouyou.demos.aspect;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component;Aspect Slf4j Component public class AspectDemo2 {Before(com.zhouyou.demos.aspect.AspectDemo.pc())public void doBefore(){log.info(AspectDemo2 doBefore);} } 启动项目根据方法路由映射即可在日志处观察到通知方法的具体执行顺序情况 使用方法注意事项 1在跨类使用公共切点时需要使用全限定类名 2在当前类中若在其类中实现的切点需要在其他类中使用则切点必须以public修饰。 使用private修饰的切点只能在当前类中使用 3.4 切面类排序 现aspect包下由AspectDemo、AspectDemo1、AspectDemo2三个切面类并在每个切面类中实现Before通知和After通知。 创建目标方法并指定路由映射并进行访问查看日志输出 在采取默认排序的情况下默认采取按照切面类的类名字母排序 对于Before通知排名越靠前的先执行 对于After通知排名越靠后的先执行 但这并不便于管理Spring提供了Order注解用于给切面类设置优先级 对于Before通知Order中的数字越小越先执行 对于After通知Order中的数字越大越先执行 现对AspectDemo切面类使用Order(3)、AspectDemo1切面类使用Order(2)、AspectDemo2切面类使用Order(1)启动程序查看日志输出
http://www.zqtcl.cn/news/763427/

相关文章:

  • 如何做招聘网站分析wordpress状态修改
  • 兰考网站建设微信运营是干嘛的
  • 网站ps照片怎么做的网站开发项目实训报告
  • 做流量网站it建设人才网
  • 杭州拱墅区网站建设推荐定制型网站建设
  • 网站建设需要达到什么样的效果上海营销网站推广多
  • 现代化公司网站建设长沙公司网站建立
  • 网站开发需要哪些人才辽宁奔之流建设工程有限公司网站
  • 做旅游产品的网站有哪些个人做搜索网站违法吗
  • 营销型网站的功能网站制作价钱多少
  • angularjs 网站模板工作感悟及心得
  • 福州 网站定制设计哈尔滨网站建设咨询
  • 酒吧网站模板创办网页
  • 外贸网站建设软件有哪些现在网站建设用什么语言
  • lnmp wordpress 主题不见高级seo课程
  • 成都哪家公司做网站最好杭州软件开发
  • 做网站多少宽带够wordpress编辑文章中图片
  • 无锡网站制作排名软件工程公司
  • 做网站国内好的服务器美食网站建设项目规划书
  • 三亚市住房和城乡建设厅网站江西电信网站备案
  • 联谊会总结网站建设对外宣传如何在家做电商
  • 360建站系统徐州建设银行网上银行个人网站
  • 网站域名在哪里备案石家庄站规模
  • 重庆南川网站制作公司电话工会网站群建设
  • 深圳高端建设网站忘了网站链接怎么做
  • 郑州做网站报价wordpress中文4.8
  • 网站维护费用一年多少跨境电商平台网站建设广州
  • 辽宁网站制作公司网店装修流程
  • html5可以做交互网站吗打开网站说建设中是什么问题?
  • 彩票网站开发制作需要什么wordpress 在线预览