切面判断注解是否存在类或者方法上 您所在的位置:网站首页 flac如何查看某个切面 切面判断注解是否存在类或者方法上

切面判断注解是否存在类或者方法上

2024-07-02 15:47| 来源: 网络整理| 查看: 265

Spring中的AOP有注解配置和XML配置两种,今天我们来讲一下注解配置。使用注解来创建切面是AspectJ5所引入的关键特性,使用注解可以非常简单地把任意类转换成切面。下面一起来看一下吧。

第一步:开启自动代理功能

使用注解的切面来实现aop,需要首先开启自动代理。使用注解的方式开启自动代理只需要在java配置类上添加注解@EnableAspectJAutoProxy即可。如图:

a54387be1062e99f1483d0dbf80e87e1.png

@EnableAspectJAutoProxy开启自动代理

使用xml开启的话也很简单,只需在xml文件中添加即可,如图:

0ab7be9faa5e837ff34de988dcdef9c0.png

开启自动代理

使用xml配置的切面则不需要,当然添加上也不会有什么影响。

第二步:定义切面

定义切面的注解为@Aspect。

AspectJ的注解可以将任一普通的java类定义为一个切面。不过首先大家要知道切面也必须是Spring管理的一个bean,所以要配置切面首先要把它配置成bean,如下图我们把一个通过自动扫描的bean设置成切面:

ef1821ffd8bbd97eb669499381561827.png

配置成切面

这只是一个空的切面,如果要是它工作还需要配置切点和通知,下面我们来看。

第三步:定义切点

定义切点的注解为@Pointcut,如下图,我们配置了3个切点:

b3cabe60eda049129233236e3f9146a8.png

其中execution表示执行的意思,括号中填写的是切点表达式。上图中仅仅写了比较简单也是比较常用的一种表达式,其中selectPointCut切点的含义为:权限为public的com.example.service包和其子包内的所有类的select方法,select方法的参数不限制,即只要是方法名为select就会被切点匹配到。

第四步:定义通知

通知定义了切面的行为,它包含了这个行为什么时候执行以及做什么。通知的类型包含以下几种:

@Before:在目标方法执行前执行通知;

@After:在目标方法执行后执行通知,无论是正常返回还是异常返回都会执行;

@AfterReturning:在目标方法执行完成后执行通知;

@AfterThrowing:在目标方法抛出异常后执行通知;

@Around:可在目标方法执行前后自定义通知行为;

这几个注解都有一个value属性,用于指定切点。可以直接在value中指定切点表达式也可以在value中引用已经存在的切点表达式,如下图

2e32f78858c6a19d890a4f1acd161a00.png

上图中Before类型的通知直接在value中定义了切点,其他类型的通知则引用了已经定义好的切点。

Around类型的通知可以接收一个ProceedingJoinPoint类型的参数,当执行joinPoint.proceed();后目标方法才会执行。

AfterThrowing类型的通知可以通过throwing属性来指定异常的名称,通过这个名称在通知方法上来接收异常。

如何在通知中接收传给目标方法的参数

这一点单独列出来说明一下,在通知中接收传给目标方法的参数有时候是很必要的,如果能接收到传给目标方法的参数,通知就可以根据目标方法的参数的值进行相应的处理,从而丰富通知的行为。那么具体怎么实现呢?其实也很简单,我们一起来看下。

假如我们的目标方法如下:

feeee9e529656bd47783b456facea800.png

目标方法

要想通知中能够接收到目标方法的参数需要做到以下四点:

第一点:切点要准确匹配到目标方法的参数。这一点是通过在切点表达式中的“&&”操作符和“args”来实现的;

第二点:在定义切点的方法上要定义参数,这些参数的名称要和args里面的参数名称一致,不过顺序可以不一致。

第三点:定义通知时引用的切点方法要正确引用到切点方法的参数,也就是像正常调用一个方法那样,否则编译也会报错。

第四点:通知的方法参数名称要和通知引用的切点的参数名称一样,顺序可以不一样。

如下图的切点和通知:

c59ec52ba2b14e8f05cc5dc715bd2295.png

切点和通知

这样就可以在通知中获取到传给目标方法的参数了。

总结

本文主要讲解了注解配置aop的方式,只要分为四步,另外还介绍了通知如何获取异常和参数的方式。希望能够帮助大家,小伙伴们如果有疑问可以在评论区留言哦。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有