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

苏州营销型网站制作sem竞价托管费用

苏州营销型网站制作,sem竞价托管费用,网站没服务器行吗,直播网站开发需要多少钱Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限&…

Spring Boot Aop 执行顺序

1. 概述

在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限,等等。所以,在项目中学习并使用 aop ,是十分必要的。然而,当我们在一个接口中使用多个 aop,时,就需要注意他们的执行顺序了。那么,它们的执行顺序是怎样的呢?如果不把这个问题搞明白,那我们的程序就不可控,这是不允许的,这就是我们今天要讨论的问题。

2. 实现 AOP

2.1 通过注解实现 AOP

MyAop:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAop {
}

MyAspect:

@Aspect
@Component
public class MyAspect {@Around("@annotation(aop)")public Object around(ProceedingJoinPoint joinPoint, MyAop aop) throws Throwable {return joinPoint.proceed();}}

SampleController#myApi:

@RestController
@RequestMapping("/sample")
public class SampleController {@MyAop@RequestMapping("/my-api")public String myApi() {return "success";}}

这样,我们就通过使用注解的方式实现了 AOP 。

2.2 通过扫描包

比如,我们有这样一个接口 SampleController#myApi2:

@RestController
@RequestMapping("/sample")
public class SampleController {@RequestMapping("/my-api2")public String myApi2() {return "success";}}

我们可以使用包扫描的方式进行拦截:

@Aspect
@Component
public class My2Aspect {@Around("execution(* com.fengwenyi.demo.springboot.aop.controller.SampleController.myApi2(..))")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {return joinPoint.proceed();}}

这样,我们也就通过使用包扫描的方式实现了 AOP 。

3. 多个 AOP

3.1 分析

先提一个疑问:多个AOP注解,执行顺序是怎么样的呢?如何设置执行顺序呢?

比如,APP 请求我们的 API 接口,在请求到达 API 接口之前,可以先执行 AOP1,在执行 AOP2,并且顺序不能变,如下图:

我们再拆解一下实际内部执行逻辑。

请求:请求先进入到 AOP1,再进入到 AOP2,最后到达 API。

返回:执行完 API,再回到 AOP2,最后回到 AOP1。

如下图:

因为我们用的是 Around,先进入Aop1,再进入到aop2,然后执行api,执行完以后,再返回到 aop2,最后返回aop1。

3.2 代码实现

MyFirstAop:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyFirstAop {
}

MyFirstAspect:

@Slf4j
@Aspect
@Component
@Order(100002)
public class MyFirstAspect {@Around("@annotation(aop)")public Object around(ProceedingJoinPoint joinPoint, MyFirstAop aop) throws Throwable {log.info("MyFirstAspect#around execute start");try {return joinPoint.proceed();} finally {log.info("MyFirstAspect#around execute end");}}}

MySecondAop:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MySecondAop {
}

MySecondAspect:

@Slf4j
@Aspect
@Component
@Order(100003)
public class MySecondAspect {@Around("@annotation(aop)")public Object around(ProceedingJoinPoint joinPoint, MySecondAop aop) throws Throwable {log.info("MySecondAspect#around execute start");try {return joinPoint.proceed();} finally {log.info("MySecondAspect#around execute end");}}}

SampleController#aopOrder:

@RestController
@RequestMapping("/sample")
public class SampleController {@MySecondAop@MyFirstAop@RequestMapping("/aop-order")public String aopOrder() {return "aopOrder";}}

image-20240119075507098

通过设定 Order 值,指定 AOP 执行顺序,与我们的期望一致。

好了,今天的分享就到这里了,源码:demo-spring-boot-aop。

http://www.hrbkazy.com/news/7620.html

相关文章:

  • 怎么做网站文章优化高清免费观看电视网站
  • 北京网站建设团队怎么在网上做广告宣传
  • 做网站不用服务器网站快速优化排名软件
  • 网站设计的摘要目前最好的营销模式
  • 网站聚合怎么做网址搜索域名查询
  • 网站建设方案书 内容管理制度市场营销策划ppt
  • 镇赉县做网站的网店推广方案
  • 天津网站优化哪家好宁波seo怎么做推广渠道
  • 柳州做网站的网站收录提交入口大全
  • 沈阳网站建设建设公司大一网页设计作业成品
  • 如何加强政府门户网站维护和网站安全建设seo数据分析哪些方面
  • 简易个人博客网站源码windows优化大师有哪些功能
  • 企业建设网站的方式有哪些谷歌浏览器网页版入口在哪里
  • 南阳专业网站制作费用做网站怎么优化
  • 个人怎样建网站赚钱新浪博客
  • 免费视频课程网站模板今日国际新闻大事
  • 湖北网站建设推荐什么网站推广比较好
  • 网站怎么做网站收录cba最新消息
  • 做网站可以没有框架吗东莞seo代理
  • 幼儿园网站建设方案结语2023年8月新冠又来了
  • 怎么免费制作一个网站网上竞价
  • 选择网站模板注意事项最新疫情最新情况
  • 东莞网站推广外包seo如何快速排名
  • 花多少钱能把网站做到页面网站推广业务
  • 学做吃的网站有哪些会员卡营销策划方案
  • 1个g网站空间多少钱论坛推广的步骤
  • 手机微信网站教育培训机构加盟十大排名
  • 磁力棒沈阳关键词seo
  • 邢台网络运营中心处理中心seo网站推广是什么意思
  • 网页设计与网站建设基础百度竞价点击一次多少钱