浅析Spring基于注解的AOP

yizhihongxing

浅析Spring基于注解的AOP

什么是AOP

AOP(Aspect Oriented Programming),面向切面编程,通过预编译方式和运行时动态代理实现在不修改原有业务代码的情况下,对系统功能进行增强。

在AOP中,切面是指一类横跨多个对象的特定行为,比如事务管理、日志管理等。切面可以包含前置、后置、环绕、异常通知等多个通知,对目标对象的方法进行增强。AOP不仅可以增强业务代码的复用性和灵活性,还可以对系统进行解耦,提高系统稳定性和可维护性。

Spring AOP注解

Spring框架提供了对AOP的支持,其中,基于注解的AOP使得AOP的实现更加简单易懂。

常用的Spring AOP注解有:

  • @Aspect:定义一个切面,当然切面也是一个类;
  • @Pointcut:定义切点,用于定义一组切入点,通常是一个方法;
  • @Before:定义前置通知,目标方法之前执行;
  • @AfterReturning:定义返回后通知,在目标方法返回结果之后执行;
  • @AfterThrowing:定义异常通知,在目标方法抛出异常之后执行;
  • @Around:定义环绕通知,包裹目标方法,在方法执行前后加入增强处理。

示例一:记录日志

作用:在方法执行之前和执行之后,分别记录日志。

在方法上加入注解@LogAnnotation

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnnotation {
    String value() default "";
}

定义切面:在方法执行前和执行后记录日志

@Aspect
@Component
public class LogAspect {

    @Before(value = "@annotation(com.example.demo.LogAnnotation)")
    public void beforeMethod(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("调用方法" + methodName + ",参数列表:" + Arrays.asList(args));
    }

    @AfterReturning(value = "@annotation(com.example.demo.LogAnnotation)",returning = "result")
    public void afterMethod(JoinPoint joinPoint,Object result) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("调用方法" + methodName + ",返回值:" + result);
    }
}

测试类:

@RestController
public class TestController {

    @RequestMapping("/test")
    @LogAnnotation("test方法")
    public String test() {
        return "Hello, World";
    }
}

当我们请求/test接口时,控制台输出:

调用方法test,参数列表:[]
调用方法test,返回值:Hello, World

示例二:异常处理

作用:当目标方法发生异常时,记录异常信息。

在方法上加入@ExceptionLog注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionLog {
    String value() default "";
}

定义切面:当方法抛出异常时,记录异常信息

@Aspect
@Component
public class ExceptionAspect {

    @AfterThrowing(value = "@annotation(com.example.demo.ExceptionLog)", throwing = "e")
    public void afterThrowing(JoinPoint joinPoint, Throwable e) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("调用方法" + methodName + ",异常信息:" + e.getMessage());
    }
}

测试类:

@RestController
public class TestController {

    @RequestMapping("/test")
    @LogAnnotation("test方法")
    @ExceptionLog("test方法")
    public String test() {
        int a = 1 / 0; // 抛出异常
        return "Hello, World";
    }
}

当我们请求/test接口时,控制台输出:

调用方法test,参数列表:[]
调用方法test,异常信息:/ by zero

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Spring基于注解的AOP - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • JS解决url传值出现中文乱码的另类办法

    下面是详细讲解“JS解决url传值出现中文乱码的另类办法”的完整攻略。 问题背景 当我们在url中传输中文时,往往会出现中文乱码的情况,导致传递失败。这是因为url只能传输 ASCII 码字符集,对于其他字符编码必须做特殊处理。一般来说,我们可以使用 encodeURI() 或 encodeURIComponent() 方法将中文字符转换成 URI 格式,但…

    html 2023年5月31日
    00
  • Android实现图片一边的三角形边框效果

    要实现在Android中图片一边的三角形边框效果,可以使用如下步骤: 步骤1:自定义Drawable 我们首先需要自定义一个Drawable,它将使用ShapeDrawable创建一个矩形形状,并在其中添加一个三角形形状,用于显示样式的边框。以下是自定义Drawable的代码示例: <?xml version="1.0" encod…

    html 2023年5月30日
    00
  • 网页编辑器FCKeditor 2.6.4精简配置方法

    下面是“网页编辑器FCKeditor 2.6.4精简配置方法”的完整攻略。 精简FCKeditor配置方法 1. 下载FCKeditor 首先,你需要在FCKeditor官方网站(https://www.fckeditor.com)上下载FCKeditor 2.6.4版本的压缩包。解压缩后,将FCKeditor文件夹放置于你的网站根目录下。 2. 精简配置文…

    html 2023年5月30日
    00
  • SEO点击工具该怎么用?用了会对网站产生哪些不好的影响?

    以下是“SEO点击工具该怎么用?用了会对网站产生哪些不好的影响?”的完整攻略: SEO点击工具该怎么用? SEO点击工具是一种可以模拟用户点击行为,提高网站排名的工具。以下是使用SEO点击工具的步骤: 步骤1:选择合适的SEO点击工具 在市场上有很多种SEO点击工具,用户需要根据自己的需求和预算选择合适的工具。一般来说,用户可以选择一些知名的SEO点击工具,…

    html 2023年5月18日
    00
  • linux系统中的chrome浏览器打开网页韩文字体重叠乱码该怎么办?

    解决 Linux 系统中 Chrome 浏览器打开网页韩文字体重叠乱码的问题可以按照以下步骤进行: 1. 确认系统已安装韩语字体 在 Linux 系统中,如果需要显示韩文字体,需要安装相应的字体文件。可以通过以下命令确认系统是否已经安装了韩语字体: fc-list :lang=ko 如果能够正常输出字体列表,则说明已经安装韩语字体。 2. 确认浏览器显示设置…

    html 2023年5月31日
    00
  • Android开发实例之登录界面的实现

    下面是详细讲解“Android开发实例之登录界面的实现”的完整攻略。 一、前置知识 在进行本教程时,您需要具备以下知识: Java基础知识 Android开发基础知识 二、登录界面实现的基本思路 我们将通过以下方式来实现登录界面: 利用XML文件搭建用户界面 在该界面中添加EditText组件来实现文本输入框 添加一个Button组件用于用户确认登录信息 编…

    html 2023年5月30日
    00
  • wps打开文档乱码怎么修复?wps打开文档乱码修复方法

    WPS打开文档乱码修复攻略 问题描述 WPS打开文档时,出现了乱码的情况,其中包括中文乱码、符号乱码、编码乱码等。这种情况下,会影响到用户的正常使用,需要及时处理。 可能的原因 文件编码与WPS默认编码不同。 文档使用的是罕见字符集。 旧版本文件无法兼容新版本WPS。 文件损坏或病毒感染。 解决方法 方法一:修改WPS默认编码 当乱码出现时,我们可以尝试修改…

    html 2023年5月31日
    00
  • 正则入门连载!(献给不及格的程序员们)

    正则入门连载!(献给不及格的程序员们) 在正则表达式中,我们需要了解一些基本的语法和符号。一些常用的语法和符号如下: .:匹配任意单个字符 *:匹配前一字符0或多次 +:匹配前一字符1或多次 ?:匹配前一字符0或1次 ():表示分组 |:表示或 []:表示字符集 [^]:表示不匹配字符集中的任何一个字符 字符匹配 . . 是正则表达式中的特殊字符,可以匹配任…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部