聊聊aop执行顺序

简介: 聊聊aop执行顺序

@Before   前置通知    目标方法之前执行

@After  - 后置通知   目标方法之后执行

@AfterReturning   返回后通知:执行方法结束前通知(异常不执行)

@AfterThrowing   异常通知 :出现异常时候执行

@Around    环绕通知:环绕目标方法执行


测试示例代码

package com.roy.aop;
public interface DivideService {
    int div(int x, int y);
}
package com.roy.aop;
import org.springframework.stereotype.Service;
@Service
public class DivideServiceImpl implements DivideService {
    @Override
    public int div(int x, int y) {
        int result = x / y;
        System.out.println("  DivideServiceImpl 被调用,测试结果为  >>>>" + result);
        return result;
    }
}
package com.roy.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MyAopAsepct {
    @Before("execution(public int com.roy.aop.DivideServiceImpl.*(..))")
    public void beforeNotify() {
        System.out.println(" ******************@Before   我是前置通知  MyAopAsepct");
    }
    @After("execution(public int com.roy.aop.DivideServiceImpl.*(..))")
    public void afterNotify() {
        System.out.println(" ******************@After  我是后置通知 ");
    }
    @AfterReturning("execution(public int com.roy.aop.DivideServiceImpl.*(..))")
    public void afterReturningNotify() {
        System.out.println(" ******************@AfterReturning  我是返回后通知 ");
    }
    @AfterThrowing("execution(public int com.roy.aop.DivideServiceImpl.*(..))")
    public void afterThrowingNotify() {
        System.out.println(" ******************@AfterThrowing  我是异常通知 ");
    }
    @Around("execution(public int com.roy.aop.DivideServiceImpl.*(..))")
    public Object aroundNotify(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        Object rev = null;
        System.out.println("我是环绕通知之前 AAA ");
        rev = proceedingJoinPoint.proceed();
        System.out.println("我是环绕通知之后 BBB ");
        return rev;
    }
}
package com.roy.aop;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootVersion;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.SpringVersion;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestAop {
    @Autowired
    private DivideService divideService;
    @Test
    public void testAopAs() {
        System.out.println(" Spring 的版本 " + SpringVersion.getVersion() + "\t" + " >>> Spring Boot 版本" + SpringBootVersion.getVersion());
        divideService.div(10, 0);
    }
}



执行结果对比





目录
相关文章
|
Java 开发者 Spring
Spring Aop 常见注解和执行顺序(下)
Spring 一开始最强大的就是 IOC / AOP 两大核心功能,我们今天一起来学习一下 Spring AOP 常见注解和执行顺序。
185 0
Spring Aop 常见注解和执行顺序(下)
|
2月前
|
前端开发 Java 数据库
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
|
3月前
|
Java API Spring
Spring Boot Aop 执行顺序
当我们在一个接口中使用多个 aop,时,就需要注意他们的执行顺序了。那么,它们的执行顺序是怎样的呢?如果不把这个问题搞明白,那我们的程序就不可控,这是不允许的,这就是我们今天要讨论的问题。
69 0
Spring Boot Aop 执行顺序
|
Java Spring
AOP切面执行顺序你真的了解吗
本文内容重点: 问题描述 Spring AOP执行顺序 探究顺序错误的真相 代码验证 结论
314 0
|
Java Spring
Spring Aop 常见注解和执行顺序(上)
Spring 一开始最强大的就是 IOC / AOP 两大核心功能,我们今天一起来学习一下 Spring AOP 常见注解和执行顺序。
411 0
Spring Aop 常见注解和执行顺序(上)
|
Java 开发者 Spring
Spring Aop 常见注解和执行顺序
Spring Aop 常见注解和执行顺序
Spring Aop 常见注解和执行顺序
|
2月前
|
Java Maven 数据安全/隐私保护
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
47 1
|
2月前
|
XML Java 数据格式
技术好文:Spring基础篇——AOP切面编程
技术好文:Spring基础篇——AOP切面编程
|
4天前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
27天前
|
Java Spring 容器
Spring问题之Spring AOP是如何实现面向切面编程的
Spring问题之Spring AOP是如何实现面向切面编程的