springboot|springboot 新建 aop 切面

本贴最后更新于 1569 天前,其中的信息可能已经渤澥桑田

javaDEMO

Java 基础 Demo 站: https://www.javastudy.cloud
Java 中高级开发博客: https://www.lixiang.red
Java 学习公众号: java 技术大本营
java_subscribe

springboot 引入 AOP

主要是分为以下几步:

  1. 引入相关的依赖
  2. 新建一个切面
  3. 编写相应的切点和通知

引入相关的依赖

除了 web 的包之外,还需要引一个 aop 相关的 starter 相关的包

compile group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: '2.2.0.RELEASE'

新建切面

通俗来讲,一个切面有两个部分组成
1 是对哪些方法做修改,加强,注入等等,都是一个意思
2 是对这些方法做什么样的修改,执行前,执行后,执行前后等等

/**
 * 声明一个切面,只用加一个@Aspect注解就可以了
 * 还有个注解@Component是声明这个类为Spring的bean
 */
@Aspect
@Component
public class TestAspect {

    /**
     * 切面的组成部分之一,告诉程序要对哪些方法进行操作
     * 在本DEMO中直接指定了一个方法,推荐后续用注解的方式去找方法
     * 在现在注解盛行的时代,这样根据方法名去找方法的用处已经不多了
     * 更多的是通过某个注解去找到对应的方法,后续也会有DEMOb出来
     */
    @Pointcut("execution(public * cloud.javastudy.demo.controller.TestController.testAspect(..))")
    public void testPointcut(){}

    /**
     * 对找到的方法进行修改
     * 有@Around,对方法执行前后进行修改
     * 有@Before, 在方法执行前进行修改
     * 有@After,  在方法执行后进行修改
     * 有@AfterReturning, 在方法返回后进行修改
     * 有@AfterThrowing, 在方法抛出异常后修改
     * 常用的是@Around,常用于对方法体加 Try-catch,对方法执行计时,对方法入参,返回做日志记录等等
     */
    @Around("testPointcut()")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("before pointcut");
        Object proceed = joinPoint.proceed();
        System.out.println("after pointcut");
        return proceed;
    }
}

被测试的方法

package cloud.javastudy.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    /**
     * 测试被切面的方法
     * @return
     */
    @RequestMapping("test/testAspect")
    public String testAspect(){
        System.out.println("in method");
        return "OK";
    }
}

结果输出:
image.png

DEMO 总评

AOP 是 spring 的两大特性之一,相对比于以前 spring 用 xml 复杂的声明,在 springboot 中使用 aop 只用引一个依赖,新建一个切面类就可以解决了, 简单的 demo 很简单,真正使用还是要好好琢磨下,如在使用 Around 时,复杂的逻辑要记得新开一个子线程来处理,我就曾经在记录 redis 的 key 命中时,因为是没有异步记录,导致 redis 出奇的慢,加油吧少年!

DEMO 下载

demoaop.zip

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 153 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...