Spring核心AOP基础
  J0tQqlYbt0QD 2023年11月02日 32 0

概念

AOP:面向切面编程,应用场景:抽取公共代码,让辅助代码和业务代码分离。 Spring支持以下5种功能增强:

  • @Before
  • @AfterRurning
  • @AfterThrowing
  • @After
  • @Around 一般情况下,@Around不和其他几个共同使用,它可以替代其他几个注解。

示例

第一步:添加依赖

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

第二步:准备需要功能增强的业务代码

package com.tiku.controller;
@RestController
public class DispatcherController {
    @GetMapping("/sth")
    public String sth(){
        fun();
        System.out.println(3/0);
        return "hello";
    }
}

第三步:写AOP类

类的声明

@Aspect  //声明该类是一个功能增强类
@Component
public class LogAop {

}

在LogAop中声明切入点:定义对哪些方法做功能增强

//拦截包com.tiku.controller及其子包下的 所有的类 的 所有的没有参数的方法
@Pointcut("execution(public * com.tiku.controller..*.*())")
public void fun() {

}

前置增强

//前置增强:在目标方法执行之前被调用
@Before("fun()")
public void before() {
    System.out.println("aop 前置准备工作");
}

返回值增强

@AfterReturning(pointcut = "fun()", returning = "res")
public void afterRetuning(String res) {
    System.out.println("aop 返回值通知 " + res);
}

异常增强

//异常增强
@AfterThrowing("fun()")
public void afterThrowing() {
    System.out.println("aop 异常通知");
}

后置增强

//后置增强:在目标方法执行之后被调用
@After("fun()")
public void after() {
    System.out.println("aop 后置收尾工作");
}

环绕增强

//环绕增强
@Around("fun()")
public void arount(ProceedingJoinPoint pjp) {
    System.out.println("11111111");
    Object res = null;
    try {
        res = pjp.proceed();
    } catch (Throwable e) {
        System.out.println("00000000");
        e.printStackTrace();
    }
    System.out.println(res);
    System.out.println("2222222222");
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   46   0   0 Java
  8s1LUHPryisj   2024年05月17日   42   0   0 Java
  aRSRdgycpgWt   2024年05月17日   44   0   0 Java
J0tQqlYbt0QD