首页 > 其他分享 >AOP

AOP

时间:2023-12-16 16:57:00浏览次数:30  
标签:异常 切点 AOP 注解 方法 表达式

2023-12-16 16:42:56

1. AOP

1.1作用

保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。

1.2注解声明切入点

 

 

①    使用execution指示器选择方法,方法表达式以 * 号开始,标识我们不关心方法的返回值类型。然后我们指定了全限定类名和方法名。对于方法参数列表,我们使用 .. 标识切点选择任意的方法,无论该方法的入参是什么

②    声明了切点,表明在该切面的切点是cn.edu.ctbu.datajpa01.webapi.StudentRestController这个接口中的所有方法。

1.3注解声明五种通知类型

 

l  Pointcut

  

使用execution指示器选择方法,方法表达式以 * 号开始,标识我们不关心方法的返回值类型。然后我们指定了全限定类名和方法名。对于方法参数列表,我们使用 .. 标识切点选择任意的方法,无论该方法的入参是什么

声明了切点,表明在该切面的切点是cn.edu.ctbu.datajpa01.webapi.StudentRestController这个接口中的所有方法。

l  Before Advice

 

   这个通知在匹配log()切入点表达式的方法执行前被调用,它简单地向控制台打印一条消息显示准备开始执行api。

l  After Advice

 

这个通知在匹配log()切入点表达式的方法执行后被调用,同样向控制台打印一条消息。

l  AfterReturning Advice

 

这个通知在匹配log()切入点表达式的方法成功返回后被调用,记录返回值到日志

l  Around

 

确保一个通知可以在方法执行之前和之后运行

这个通知包裹了被匹配的方法,记录了方法的执行时间,并打印了方法的全限定名和执行时间到日志中。

1.4 注解声明切点表达式

多个通知使用了相同的切点表达式,对于像这样频繁出现的相同的表达式,我们可以使用 @Pointcut注解声明切点表达式,然后使用表达式——Pointcut去重。

 

声明了一个切点表达式,该方法 log的内容并不重要,方法名也不重要,实际上它只是作为一个标识,供通知使用。

1.5 测试

①失败:

 

 

②成功:

 

 

2. 统一返回值

2.1作用

在springboot项目里我们希望接口返回的数据包含至少三个属性:

code:请求接口的返回码,成功或者异常等返回编码,例如定义请求成功。

message:请求接口的描述,也就是对返回编码的描述。

data:请求接口成功,返回的结果。

2.2    创建枚举

 

2.3    创建返回结果类R

在utils包下定义一个统一的返回格式类

 

2.4    测试

 

 

3. 统一异常处理

3.1自定义异常类

定义了一个名为 RException 的自定义异常类

 

l  接受一个错误代码和一个错误消息作为参数,并通过调用父类 RuntimeException 的构造函数来设置异常消息。

l  这样子在应用程序中抛出特定类型的异常,以便更容易捕获和处理。在捕获这个异常时,可以访问错误代码和消息,以便进行相应的处理。

3.2全局异常处理类

 

l  一个Exception类型的异常作为参数,用于处理捕获到的异常。使用RUtil.error方法创建一个通用错误响应对象R。错误代码为-999,错误消息为捕获到的异常的消息(通过e.getMessage()获取)

l  @RestControllerAdvice注解:用来开启全局的异常捕获

l  @ExceptionHandler注解:说明捕获哪些异常,对那些异常进行处理。在这个类中,用于处理Exception类型的异常。

3.3 业务逻辑

在studentService中加入业务逻辑,验证用户提供的用户名和密码是否正确。如果不正确,抛出异常,如果正确,可能需要添加相应的逻辑来处理验证成功的情况。

 

3.4 controller代码测试

 

测试结果:

①    正常

 

②    异常

 

4. 实验心得体会

这一次实验主要涉及了Spring框架中的几个关键概念和技术,包括Spring AOP(Aspect-Oriented Programming)和Spring MVC中的异常处理。

l  Spring AOP

通过@Aspect注解和切面表达式,我们可以使用Spring AOP来定义切面,实现在应用程序中的不同层次上横切关注点。通过@Before和@After注解的方法,我们可以在目标方法执行之前和之后执行额外的逻辑。在这次实验过程中使用的切面主要用于记录方法的执行时间和输出返回值,还可以用在异常处理,日志记录等。

l  通用响应对象和异常处理

通用响应对象R<T>的设计使得可以在应用程序中一致地封装响应。全局异常处理类则通过@RestControllerAdvice和@ExceptionHandler注解,提供了一种集中处理异常的机制。

l  业务逻辑验证

通过validateUserPassword方法,实现了简单的用户名和密码的验证逻辑,抛出异常来表示验证失败。

总体而言,这一节帮助我更深入地理解了Spring框架中AOP和异常处理的一些关键概念,以及如何处理捕获全局异常以及怎么自定义异常,顺便说明了统一结果的返回格式。而这些知识对于构建可维护和健壮的程序是非常有用的,让我对Spring的理解有了更深的认识和理解。

 

标签:异常,切点,AOP,注解,方法,表达式
From: https://www.cnblogs.com/dorabbit/p/17905016.html

相关文章

  • Spring系列:基于Spring-AOP和Spring-Aspects实现AOP切面编程
    目录一、概念及相关术语概念相关术语①横切关注点②通知(增强)③切面④目标⑤代理⑥连接点⑦切入点作用二、基于注解的AOP技术说明准备工作创建切面类并配置各种通知切入点表达式语法重用切入点表达式获取通知的相关信息环绕通知切面的优先级三、基于XML的AOP准备工作实现一、概念......
  • springboot+vue小白升级之路13-AOP实现登录、增删改查操作日志管理
    还是接着上一个的内容,我把这个新增的关于日志的功能代码都贴出来,供大家学习参考。数据库数据库droptableifexistsan_log;createtablean_log( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnullcomment'操作内容', log_dateda......
  • Spring AOP中的不同类型的自动代理实现方式:BeanNameAutoProxyCreator DefaultAdvisorA
    “BeanNameAutoProxyCreator”、“DefaultAdvisorAutoProxyCreator”和“Metadataautoproxying”是SpringAOP中的不同类型的自动代理实现方式。BeanNameAutoProxyCreator:BeanNameAutoProxyCreator是一个自动代理创建器,它根据bean的名称进行自动代理。在配置中,你可以指定一组目......
  • SpringAOP的组成包含哪些
    SpringAOP的组成包含哪些SpringAOP(面向切面编程)的主要组成部分包括以下几个关键概念:切面(Aspect):切面是横切关注点的模块化单元。它封装了横切关注点的具体实现,包括通知和切点。通常,切面是一个类,其中包含了定义在何处以及如何执行横切关注点的代码。通知(Advice):通知是切面......
  • mini-spring 学习笔记—AOP
    切点表达式ClassFilter和MethodMatcher这两个接口都定义了一个叫做mathes的方法,用于匹配ClassFilter接口规范了类匹配器的行为booleanmatches(Class<?>clazz);MethodMatcher接口规范了方法匹配器的行为booleanmatches(Methodmethod,Class<?>targetClass);Poi......
  • Springboot AOP注解实现切面拦截
    注解声明@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfacexxxAnnotation{/***注解属性*/Objectxxx()default5;}注解逻辑实现/***@authoralpha.*@classNamexxxAn......
  • 在net中通过Autofac实现AOP的方法及实例详解
     在本示例中,我们将使用Autofac和AspectC(Autofac.Extras.DynamicProxy2)来演示如何实现AOP(面向切面编程)。我们将创建一个简单的C#控制台应用程序,并应用AOP以解决日志记录的问题。首先,让我们讨论AOP的用途和目标。AOP(面向切面编程)的用途AOP是一种编程范式,旨在解决横切关注点(cro......
  • Spring AOP中动态代理的选择
    SpringAOP的实现是通过动态代理,并且有两种实现方式,分别是JDK动态代理和CGLib动态代理。Spring默认使用JDK动态代理,只有在类没有实现接口时,才会使用CGLib。JDK的动态代理存在限制,那就是被代理的类必须是一个实现了接口的类,代理类需要实现相同的接口,代理接口中声明的方法。若需要......
  • AOP-@Around环绕增强-理解问题-测试-记录
    来源自定义注解测试切面环绕时,接口测试返回空白。理解关键在于:环绕增强后走的是切面类中的方法,你不给返回值(习惯void)就是空白=-=。@Around它可以包围一个方法或函数的执行,并在执行前后提供额外的逻辑。使用@Around注解,你可以定义一个通知(advice),该通知在目标方法执行之前和......
  • AOP切面编程实现异常捕获——try-catch的更优解?
    AOP(面向切面编程)是一种编程范式,它的目的是通过将横切关注点(如日志记录、事务管理、异常处理等)从主要业务逻辑中分离出来,以提高代码的模块化和可维护性。在异常处理方面,有人认为使用AOP来实现异常捕获能够提供更优雅的解决方案,相比于传统的try-catch块。以下是一些可能的优势和注......