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

网站 建设 内容wordpress宝塔开启ssl

网站 建设 内容,wordpress宝塔开启ssl,app定制制作价格,红酒公司网站建设模板6841前言 ???本期讲解关于spring aop的入门介绍~~~ ??感兴趣的小伙伴看一看小编主页:-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.AOP概述 1.1什么是AOP ?1.2什么是Spring AOP ???2.Spring AOP入…

前言

???本期讲解关于spring aop的入门介绍~~~

??感兴趣的小伙伴看一看小编主页:-CSDN博客

?? 你的点赞就是小编不断更新的最大动力

??那么废话不多说直接开整吧~~

目录

???1.AOP概述

1.1什么是AOP

?1.2什么是Spring AOP

???2.Spring AOP入门

2.1环境设置

2.2代码编写

???3.Spring AOP详细

3.1Spring AOP核心概念

1.切点

2.连接点

3.通知

4.切面

3.2Spring AOP通知类型

3.3@pointcut注解

3.4@order切面优先级

???4.总结

**??**1.AOP概述

1.1什么是AOP

AOP是Spring框架的第核(第核是IoC),说明AOP也是非常重要的;

AOP:Aspect Oriented Programming(向切编程)

面向切面编程:所谓的这里的切面就是表示一类特殊的问题,所以也叫面向特定方法编程;

这里特定的方法,在之前学习过的spring统一功能处理中,涉及到登录校验问题,而拦截器就是对这类问题的统一求解,AOP是一种求解问题的思想,那么拦截器就是一种思想的实现;

总结:

简单来说: AOP是种思想, 是对某类事情的集中处理

1.2什么是Spring AOP

AOP是种思想, 它的实现法有很多, 有Spring AOP,也有AspectJ、CGLIB等.Spring AOP是其中的种实现式;

在日常的代码编写中,有以下列子:

假如,我们要对这里面的接口实现改良,让执行时间减少,这里就定位到某些业务代码逻辑等改进,但是不是所有都是不好的,所以我们需要进行测试每个接口,业务执行的时间,那么就有如下的代码,来进行时间检测:

此时的方法固然是可以的,但是那么多接口都需要这样写吗??答案是不可能的,此时这就是一类特定的问题,此时我们就可以使用AOP思想来进行解决~~~

AOP就可以做到在不改动这些原始法的基础上, 针对特定的法进功能的增强.
AOP的作:在程序运期间在不修改源代码的基础上对已有法进增强(侵性: 解耦)

**??**2.Spring AOP入门

2.1环境设置

首先创建一个springboot项目,设置Maven,然后引入如下的依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

这里还可以引入lombok来进行slf4j日志打印,但是在新版本中要将引入的lombok中一部分给注释掉,如下所示:

           <plugins><!-- <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin>--><plugin>
2.2代码编写

具体的代码如下所示:

@Slf4j
@Aspect
@Component
//交给spring进行管理
public class TimeAspect {@Around("execution(* com.example.springaop.controller.*.*(..))")public Object timeRecord(ProceedingJoinPoint joinPoint) throws Throwable {//记录开始时间long start = System.currentTimeMillis();//执行目标方法Object proceed = joinPoint.proceed();//记录结束时间long end = System.currentTimeMillis();//日志打印耗时log.info("耗时时间: "+ (end-start) + "ms");return proceed;}
}

解释:

1. @Aspect: 标识这是个切类
2. @Around: 环绕通知, 在标法的前后都会被执. 后的表达式表对哪些法进增强.
3. ProceedingJoinPoint.proceed() 让原始法执

那么上述代码大致分为如下:

总结优势:

代码侵: 不修改原始的业务法, 就可以对原始的业务法进了功能的增强或者是功能的改变
减少了重复代码
提开发效率
维护便

**??**3.Spring AOP详细

3.1Spring AOP核心概念
1.切点

切点(Pointcut), 也称之为"切点"
Pointcut 的作就是提供组规则 (使 AspectJ pointcut expression language 来描述), 告诉程序对哪些法来进功能增强

如下所示:

execution(* com.example.springaop.controller.*.*(..))

这个就是切点表达式;

2.连接点

满切点表达式规则的法, 就是连接点. 也就是可以被AOP控制的法,上述切点表达式中的类就是controller,说明这里面的所有方法都是AOP控制方法;

解释:直白来说就是我们需要操作的解决的一类问题接口,就是受到AOP管理的;

这个就是连接点;

3.通知

通知就是具体要做的作, 指哪些重复的逻辑,也就是共性功能(最终体现为个法)如上述程序中记录业务法的耗时时间, 就是通知;

具体的部分就是如下:

在AOP向切编程当中, 我们把这部分重复的代码逻辑抽取出来单独定义, 这部分代码就是通知的内容.

4.切面

切(Aspect) = 切点(Pointcut) + 通知(Advice)
通过切就能够描述当前AOP程序需要针对于哪些法, 在什么时候执什么样的操作,切面包含了通知中要执行的逻辑,以及连接点的定义

3.2Spring AOP通知类型

Spring中AOP的通知类型有以下种:
@Around: 环绕通知, 此注解标注的通知法在标法前, 后都被执
@Before: 前置通知, 此注解标注的通知法在标法前被执
@After: 后置通知, 此注解标注的通知法在标法后被执, 论是否有异常都会执
@AfterReturning: 返回后通知, 此注解标注的通知法在标法后被执, 有异常不会执
@AfterThrowing: 异常后通知, 此注解标注的通知法发异常后执

那么这里主要是通过代码来进行实验;

每个通知类型的代码如下所示:

@Slf4j
@Component
@Aspect
public class AspectDemo1 {@Around("execution(* com.example.springaop.controller.*.*(..))")public Object aroundTest(ProceedingJoinPoint point) throws Throwable {//通知log.info("Around 开始执行");//执行目标函数Object result = point.proceed();//结束打印log.info("Around 结束执行");return result;}@Before("execution(* com.example.springaop.controller.*.*(..))")public void beforeTest(){log.info("before 开始执行");}@After("execution(* com.example.springaop.controller.*.*(..))")public void afterTest(){log.info("after 开始执行");}@AfterReturning("execution(* com.example.springaop.controller.*.*(..))")public void afterReturnTest(){log.info("afterReturn 开始执行");}@AfterThrowing("execution(* com.example.springaop.controller.*.*(..))")public void afterThrowTest(){log.info("afterThrow 开始执行");}
}

解释:

从上到下依次的通知类型,就是注解所表示,但是对于环绕通知中,要包含这里的连接点,即目标执行方法,以及返回类型是object;环绕通知需要调 ProceedingJoinPoint.proceed() 来让原始法执, 其他通知不需要考虑标法执;

此时运行如下的测试类:

@Slf4j
@RestController
@RequestMapping("/test")
public class AspectTest {@RequestMapping("/t1")public String test1(){log.info("这是目标方法,开始执行");return "t1";}@RequestMapping("/t2")public String test2(){log.info("这是目标方法,开始执行");int a=10/0;return "t2";}
}

那么此时我们先运行这里没有算数异常的代码,输出的情况如下所示:

解释:

程序正常运的情况下, @AfterThrowing 标识的通知法不会执
从上图也可以看出来, @Around 标识的通知法包含两部分, 个"前置逻辑", 个"后置逻辑".其
中"前置逻辑" 会先于 @Before 标识的通知法执, “后置逻辑” 会晚于 @After 标识的通知法执

此时运行异常代码,结果如下所示:

解释:

@AfterReturning 标识的通知法不会执, @AfterThrowing 标识的通知法执了
@Around 环绕通知中原始法调时有异常,通知中的环绕后的代码逻辑也不会在执了(因为
原始法调出异常了

3.3@pointcut注解

上代码存在个问题, 就是存在量重复的切点表达式 execution(*com.example.demo.controller.*.*(…)) , Spring提供了 @PointCut 注解, 把公共的切点
表达式提取出来, 需要到时引该切点表达式即可

代码如下所示:

 @Pointcut("execution(* com.example.springaop.controller.*.*(..))")public void pt(){}@Around("pt()")public Object aroundTest(ProceedingJoinPoint point) throws Throwable {//通知log.info("Around 开始执行");//执行目标函数Object result = point.proceed();//结束打印log.info("Around 结束执行");return result;}

解释:

此时就是通过@pointcut注解,对于切点表达式进行了提取,那么之后再次进行通知注解的切点表达式编写时,就可以直接使用提取的方法;

这里的方法若设置为私有类,那么只能在这一个类中进行使用,但是如果其他类要使用,这里必须变成public访问限定符;

代码如下所示:

@Slf4j
@Aspect
public class AspectDemo2 {@Before("com.example.springaop.aspect.AspectDemo1.pt()")public void beforeTest() {log.info("AspectDemo2 before 开始执行...");}

其中@before注解中的切点编写就是,提取方法的全限定路径+类名+方法名;

3.4@order切面优先级

假如定义了多个切类时, 并且这些切类的多个切点都匹配到了同个标法.情况如下所示

首先定义三个切面类,里面的通知方法大致如下:

public class AspectDemo3 {@Before("com.example.springaop.aspect.AspectDemo1.pt()")public void doBefore(){log.info("AspectDemo3 do before...");}@After("com.example.springaop.aspect.AspectDemo1.pt()")public void doAfter(){log.info("AspectDemo3 do after...");}}

此时进行路由访问后,打印的日志如下所示:

解释:

存在多个切类时, 默认按照切类的类名字排序
@Before 通知:字排名靠前的先执
@After 通知:字排名靠前的后执

那么此时我们可以通过@order注解实现顺序的逆转,代码如下所示:

@Component
@Aspect
@Order(3)
public class AspectDemo3 {
}

解释:

我们设置AspectDemo3order为3,AspectDemo4的order为2,AspectDemo5的order为1,输出的结果如下所示:

通过上述程序的运结果, 得出结论:
@Order 注解标识的切类, 执顺序如下:
@Before 通知:数字越先执
@After 通知:数字越先执
@Order 控制切的优先级, 先执优先级较的切, 再执优先级较低的切, 最终执标法

**??**4.总结

本期主要讲解了关于Spring AOP入门概念,以及快速入门,以及Spring AOP的代码的详细介绍:切点,连接点,通知,以及切面的概念,还有通知类型等其他注解的介绍~~~

???~~~~最后希望与诸君共勉,共同进步!!!


???以上就是本期内容了, 感兴趣的话,就关注小编吧。

???期待你的关注~~~


文章转载自:

http://1fbUHs63.LwLnw.cn
http://1KUzz9uI.LwLnw.cn
http://Of13QwU4.LwLnw.cn
http://8WCUl2B1.LwLnw.cn
http://sgFwVs0E.LwLnw.cn
http://WaZu3A1W.LwLnw.cn
http://BT8OpotP.LwLnw.cn
http://6v7wKBgs.LwLnw.cn
http://t6B7EHus.LwLnw.cn
http://Ya91D4eA.LwLnw.cn
http://fpbU7ony.LwLnw.cn
http://ow6J5kwz.LwLnw.cn
http://doa0Ouhu.LwLnw.cn
http://EkRjcgp4.LwLnw.cn
http://2xhHKVu3.LwLnw.cn
http://w9s8gxz6.LwLnw.cn
http://3n696GBs.LwLnw.cn
http://k4JeHSpE.LwLnw.cn
http://4b0GBBCq.LwLnw.cn
http://VCB7bxyl.LwLnw.cn
http://XrWrED3j.LwLnw.cn
http://xGSVGDLG.LwLnw.cn
http://pZuvLF8S.LwLnw.cn
http://Pli0D8mT.LwLnw.cn
http://t4cvw1Or.LwLnw.cn
http://yt5YI3hq.LwLnw.cn
http://23OWNpnX.LwLnw.cn
http://aHAKxLC0.LwLnw.cn
http://muvF8dtI.LwLnw.cn
http://G6f4JNnr.LwLnw.cn
http://www.dtcms.com/wzjs/611546.html

相关文章:

  • 西安建设公司网站南通个人网站建设
  • 贵阳网站建设哪家网络管理系统逻辑上的四个组成
  • 上海网站建设哪家便宜怎么做网站流量
  • 五百人建站wordpress 质感主题
  • 怎么查询网站备案信息查询网站建设管理员
  • 建设网站答题赚钱惠州企业自助建站
  • 美橙互联送的网站源代码丽江市住房和城乡建设局网站
  • 网站建设要钱么简单的管理系统
  • 做哪些网站好html自学怎么入门
  • 网站正在建设中模板下载广州营销型网站建设培训
  • 福田网站设计处理广州静态管理
  • 怎么做点击文字进入的网站wordpress文章加密
  • 做百度推广需要有网站吗浙江高速建设公司网站
  • 云图书馆平台网站建设大连建设网网址
  • 公司做网站的费用怎么记账全国企业信息网查询平台官网
  • 西安建站模板郴州市做网站
  • 科技馆网站建设方案天津高端模板建站
  • 舟山网站开发南昌网站建设的流程
  • 网站关键词如何收录常用网站建设软件
  • 网站开发的未来发展趋势最新的新闻 最新消息
  • 云南商城网站建设网站域名如何使用
  • 如何建设网站安全建工行业建设标准网站
  • 以投资思维做网站柳江企业网站建设公司
  • 深圳网站备wordpress主题 时间轴
  • 西安市建设干部学校网站最新网络游戏排行榜2021前十名
  • 苏州建网站的公司一站式服务公司推广文案模板
  • 婚礼摄影作品网站ic外贸网站建设
  • 家居企业网站建设资讯网站制作北京网站建设公司哪家好
  • 网站推广公司卓立海创wordpress常用主题修改
  • 做网站是什么时候分页wordpress首页友情链接插件