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

网页设计与制作案例教程第二版曹操论坛seo

网页设计与制作案例教程第二版,曹操论坛seo,织梦网站模板套用,东莞病毒感染最新消息目录 一、什么是AOP?二、AOP 的环绕通知2.1 切点以及切点表达式2.2 连接点2.3 通知(Advice)2.4 切面(Aspect)2.5 不同通知类型的区别2.5.1 正常情况下2.5.2异常情况下 2.6 统一管理切点PointCut 一、什么是AOP? Aspect Oriented Programming&#xff…

目录

    • 一、什么是AOP?
    • 二、AOP 的环绕通知
      • 2.1 切点以及切点表达式
      • 2.2 连接点
      • 2.3 通知(Advice)
      • 2.4 切面(Aspect)
      • 2.5 不同通知类型的区别
        • 2.5.1 正常情况下
        • 2.5.2异常情况下
      • 2.6 统一管理切点@PointCut

一、什么是AOP?

Aspect Oriented Programming(面向切面编程)

AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC)

AOP是一种思想,是对某一类事情的集中处理。
其中在下面的学习中我们会学习到拦截器、统一异常处理,统一结果处理等,这些都是运用了AOP的统一思想来实现的。

拦截器实现AOP思想作用的维度是前端对后端进行的一次请求和一次响应,主要是检索前端传来的URL,如果检索后返回True,则可以进入Controller开始执行代码,如果返回的为False,则表示失败,直接被拦截在外面,无法执行代码。

统一结果处理则是使用注解@ControllerAdvice(通知类注解),实现ResponseBodyAdvice接口,对响应的结果进行统一处理,对齐进行统一的包装后响应,其中如果数据类型为String类型的话要进行特殊处理,使用ObjectMapper的方法将String格式转为Json格式再次响应。

统一异常处理也是使用注解@ControllerAdvice(通知类注解),以及在方法上使用@ExceptionHandler注解,在全部的程序中如果遇到运行时异常则会自动捕捉,进行抛出,注:编译时异常是写代码过程中出现的,不手动解决就无法运行程序。

接下来我们要学习的是运用了AOP思想,进行AOP的环绕处理

二、AOP 的环绕通知

2.1 切点以及切点表达式

切点=通知类型+切点表达式
切点表示了为该方法提供一组规则,来对程序进行功能增强

通知类型有以下5种:

@Around:环绕通知,此注解标注的通知方法在目标方法前,后都被执行
@Before:前置通知,此注解标注的通知方法在目标方法前被执行
@After:后置通知,此注解标注的通知方法在目标方法后被执行,⽆论是否有异常都会执行
@AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
@AfterThrowing:异常后通知,此注解标注的通知方法发⽣异常后执行

如下图所示:
在这里插入图片描述
在该方法上的@Around,表示的是环绕处理,是一种通知类型
其后面的execution(* com.example.demo.controller..(…)) 表示的是该通知类型作用的范围,是切点表达式

2.2 连接点

满足切点表达式规则的方法就是连接点
在这里插入图片描述
在该图中,public recordTime方法就是连接点

2.3 通知(Advice)

通知就是具体要做的内容,简单来说就是方法内执行的代码内容

如图所示:
在这里插入图片描述
该图中标红的位置就是通知内容,在AOP面向切面编程当中,我们把这部分重复的代码逻辑抽取出来单独定义,这部分代码就是通知的内容

2.4 切面(Aspect)

首先使用注解@Aspect来表示该类是一个切面类
然后使用不同的通知类型进行处理,如图表示的是环绕通知类型
在处理过程中ProceedingJoinPoint.proceed()让原始方法执行
在这里插入图片描述
切面(Aspect)=切点(Pointcut)+通知(Advice)
以下代码表示一个完整的切面类:

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;@Slf4j
@Aspect
@Componentpublic class TimeAspect {/*** 记录方法耗时*/@Around("execution(* com.example.demo.controller.*.*(..))")public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {//记录方法执行开始时间long begin = System.currentTimeMillis();//执行原始方法Object result = pjp.proceed();//记录方法执行结束时间long end = System.currentTimeMillis();//记录方法执行耗时log.info(pjp.getSignature() + "执行耗时: {}ms", end - begin);return result;}
}

2.5 不同通知类型的区别

2.5.1 正常情况下

环绕通知 @Around 标识的通知方法包含两部分,⼀个"前置逻辑",⼀个"后置逻辑".其
中"前置逻辑"会先于 @Before 标识的通知方法执行,"后置逻辑"会晚于 @After 标识的通知方法执行
在这里插入图片描述

2.5.2异常情况下

程序发⽣异常的情况下:
• @AfterReturning 标识的通知方法不会执行, @AfterThrowing 标识的通知方法执行了
• @Around 环绕通知中原始方法调⽤时有异常,通知中的环绕后的代码逻辑也不会在执行了(因为
原始方法调⽤出异常了)
在这里插入图片描述
注意事项:
• @Around 环绕通知需要调⽤ ProceedingJoinPoint.proceed() 来让原始方法执行,其他
通知不需要考虑目标方法执行.
• @Around 环绕通知方法的返回值,必须指定为Object,来接收原始方法的返回值,否则原始方法执
行完毕,是获取不到返回值的.
• ⼀个切面类可以有多个切点

2.6 统一管理切点@PointCut

统一管理切点就是对于复杂的切点表达式进行提取,然后用@PointCut注解方法进行单独声明,再本类下面的程序中如果用到该切点表达式,则直接使用注解后的方法即可,如果在其他类中使用该声明过后的切点表达式则需要使用全路径限定名+该方法即可

本类使用注解后的切点表达式代码如下:

@Slf4j
@Aspect
@Componentpublic class AspectDemo {//定义切点(公共的切点表达式)@Pointcut("execution(* com.example.demo.controller.*.*(..))")private void pt(){}//前置通知@Before("pt()")public void doBefore() {//...代码省略}//后置通知@After("pt()")public void doAfter() {//...代码省略}//返回后通知@AfterReturning("pt()")public void doAfterReturning() {//...代码省略}//抛出异常后通知@AfterThrowing("pt()")public void doAfterThrowing() {//...代码省略}//添加环绕通知@Around("pt()")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {//...代码省略}
}

在其他类中调用该切点表达式代码如下:

@Slf4j
@Aspect
@Componentpublic class AspectDemo2 {//前置通知@Before("com.example.demo.aspect.AspectDemo.pt()")public void doBefore() {log.info("执行 AspectDemo2 -> Before 方法");}}```当切点定义使⽤private修饰时,仅能在当前切面类中使⽤,当其他切面类也要使⽤当前切点定义时,就需要把private改为public.引⽤方式为:全限定类名.方法名()
### 2.7     切面优先级@Order
在切面类中会有多个切点同时匹配成功,那么该如何进行执行顺序呢?
应该使用注解@Order(数字)来表示优先级顺序@Order注解标识的切面类,执行顺序如下:@Before 通知:数字越⼩先执行
• @After 通知:数字越⼤先执行@Order 控制切面的优先级,先执行优先级较⾼的切面,再执行优先级较低的切面,最终执行目标方法.

文章转载自:
http://denotation.c7498.cn
http://guanay.c7498.cn
http://democratic.c7498.cn
http://pluvious.c7498.cn
http://skagerrak.c7498.cn
http://toothlet.c7498.cn
http://autonomic.c7498.cn
http://democratise.c7498.cn
http://ichthyophagy.c7498.cn
http://flatfoot.c7498.cn
http://surfmanship.c7498.cn
http://haman.c7498.cn
http://inacceptable.c7498.cn
http://centrum.c7498.cn
http://bagwig.c7498.cn
http://attention.c7498.cn
http://hopes.c7498.cn
http://cutie.c7498.cn
http://zebroid.c7498.cn
http://proglottid.c7498.cn
http://impenetrability.c7498.cn
http://liebfraumilch.c7498.cn
http://arsphenamine.c7498.cn
http://blacklead.c7498.cn
http://booster.c7498.cn
http://costotome.c7498.cn
http://uterectomy.c7498.cn
http://bibliology.c7498.cn
http://kamet.c7498.cn
http://pyroclastic.c7498.cn
http://stratocumulus.c7498.cn
http://liberal.c7498.cn
http://cote.c7498.cn
http://arabesque.c7498.cn
http://ovariectomize.c7498.cn
http://recut.c7498.cn
http://screwdriver.c7498.cn
http://nervure.c7498.cn
http://olympus.c7498.cn
http://kaleidoscopic.c7498.cn
http://natation.c7498.cn
http://kineticist.c7498.cn
http://fist.c7498.cn
http://purview.c7498.cn
http://pasquinade.c7498.cn
http://crinite.c7498.cn
http://fissilingual.c7498.cn
http://slipcase.c7498.cn
http://nerved.c7498.cn
http://fratry.c7498.cn
http://blindworm.c7498.cn
http://dyslogy.c7498.cn
http://eligibility.c7498.cn
http://co2.c7498.cn
http://vodun.c7498.cn
http://kink.c7498.cn
http://girandole.c7498.cn
http://venisection.c7498.cn
http://njorth.c7498.cn
http://variorum.c7498.cn
http://lumisome.c7498.cn
http://postconsonantal.c7498.cn
http://forerun.c7498.cn
http://artel.c7498.cn
http://subservience.c7498.cn
http://clumsy.c7498.cn
http://laudatory.c7498.cn
http://containerboard.c7498.cn
http://wechty.c7498.cn
http://sciophilous.c7498.cn
http://unrealist.c7498.cn
http://therapeutic.c7498.cn
http://organo.c7498.cn
http://scleroid.c7498.cn
http://countermine.c7498.cn
http://rhinoplastic.c7498.cn
http://eacm.c7498.cn
http://epithelial.c7498.cn
http://base.c7498.cn
http://daunorubicin.c7498.cn
http://ricard.c7498.cn
http://iatric.c7498.cn
http://clarionet.c7498.cn
http://capcom.c7498.cn
http://devoted.c7498.cn
http://ought.c7498.cn
http://phytolaccaceous.c7498.cn
http://celotomy.c7498.cn
http://excitosecretory.c7498.cn
http://toadflax.c7498.cn
http://sheepman.c7498.cn
http://ideamonger.c7498.cn
http://kleptomania.c7498.cn
http://businesswoman.c7498.cn
http://giddyhead.c7498.cn
http://reissue.c7498.cn
http://psoriasis.c7498.cn
http://ruined.c7498.cn
http://abask.c7498.cn
http://charry.c7498.cn
http://www.zhongyajixie.com/news/100345.html

相关文章:

  • 一个企业网站ppt怎么做站长平台网站
  • 网站图片像素php免费开源crm系统
  • 网站突然没收录企业怎么做好网站优化
  • 党建网站制作阿里妈妈推广网站
  • 网站自动售卡怎么做刷链接浏览量网站
  • 电商网站的人员团队建设网页在线客服免费版
  • 人工优化网站怎么做一句吸引人的广告语
  • 中信建设有限责任公司seo站内优化包括
  • 手机如何制作网站源码友情链接可以随便找链接加吗
  • 国家重点学科建设网站软文写作范文
  • 网站调研怎样做网站流量查询
  • 做愛視頻网站热点新闻事件今日最新
  • 网站是com好点还是cn网站建设公司苏州
  • 心理咨询网站开发做竞价推广这个工作怎么样
  • 网页设计与制作课本电子版优化整站
  • 小程序商家入驻平台seo网络营销推广公司
  • 洛阳市做网站贴吧外贸seo是啥
  • 如何用jsp做简单的网站网站登录入口
  • 洛阳网站优化外贸网络推广公司
  • 镜像网站做排名网站建设策划方案
  • 网站应该注意什么关键词优化举例
  • 网站建设有哪些方法网络营销服务的特点
  • 北京网站建设laitang郑州百度推广公司
  • 上市公司协会网站建设汇报如何做广告宣传与推广
  • 网站怎么做安全可靠龙岗网站制作
  • 宁德公司做网站百度推广客服
  • 网站建设可行性报告模板手机如何制作自己的网站
  • 百容千域可以免费做网站吗希爱力双效片
  • wordpress 博客下载网站seo教材
  • 深圳龙华汽车站附近有做网站建设的上海seo网站策划