Spring AOP 代码案例

简介: Spring AOP 代码案例


AOP组成

  • 切面 : 切⾯(Aspect)由切点(Pointcut)和通知(Advice)组成,它既包含了横切逻辑的定义,也包括了连接点的定义,切⾯是包含了:通知、切点和切⾯的类,相当于 AOP 实现的某个功能的集合
  • 连接点 : 应⽤执⾏过程中能够插⼊切⾯的⼀个点,这个点可以是⽅法调⽤时,抛出异常时,甚⾄修改字段时。切⾯代码可以利⽤这些点插⼊到应⽤的正常流程之中,并添加新的⾏为.
  • 切点 : Pointcut 是匹配 Join Point 的谓词,切点相当于保存了众多连接点的⼀个集合(如果把切点看成⼀个表,⽽连接点就是表中⼀条⼀条的数据
  • 通知 : 切⾯的⼯作被称之为通知, 实现的这个切面提供什么功能

通知的具体方法类型

  • 前置通知: @Before, 通知方法会在目标方法执行之前执行
  • 后置通知: @After, 通知⽅法会在⽬标⽅法返回或者抛出异常后调⽤
  • 返回之后通知: @AfterReturning, 通知方法会在目标返回后调用
  • 抛异常后通知: @AfterThrowing , 通知方法会在抛出异常后调用
  • 环绕通知: @Around, 通知包裹了被通知的⽅法,在被通知的⽅法通知之前和调⽤之后执
    ⾏⾃定义的⾏为

引入Spring AOP依赖

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

 

定义AOP层

@Aspect // 定义这个类为切面
@Component // 让这个类随着spring项目的启动而注入被自动识别
public class UserAspect {
 
    // 定义切点
    @Pointcut("execution(* *com.example.springaoptest1.userController.UserController.*(..))")  // 定义切点
    public void pc(){};
 
    @Before("pc()")
    public void doBefore() {
        System.out.println("执行前置通知");
    }
 
    @Around("pc()")
    public Object doAroud(ProceedingJoinPoint joinPoint) {
        System.out.println("环绕通知开始执行");
        Object ret;
        try {
            ret = joinPoint.proceed();
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
        System.out.println("环绕通知执行之后");
        return ret;
    }
 
}

UserController

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getUser")
    public String getUser() {
        System.out.println("do getUser!");
        return "user";
    }
 
    @RequestMapping("/delUser")
    public String delUser() {
        System.out.println("do delUser!");
        return "del user";
    }
}

Postman测试

AOP工作流程

  1. Spring容器启动
  2. 读取所有配置中的切入点
  3. 初始化bean, 判定bean对应的类中的方法是否匹配到任意切入点
  1. 匹配失败, 创建对象
  2. 匹配成功, 创建原始对象的代理对象
  1. 获取bean执行方法
  1. 获取bean, 调用方法并执行, 完成操作
  2. 获取的是bean代理对象, 根据代理对象的运行模式, 运行原始方法, 增强的内容, 完成操作

       

目录
相关文章
|
8天前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
28天前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
35 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
14天前
|
缓存 监控 Java
|
13天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
26 1
|
9天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
21 0
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
404 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
Java 编译器 Spring
Spring AOP 和 AspectJ 的区别
Spring AOP和AspectJ AOP都是面向切面编程(AOP)的实现,但它们在实现方式、灵活性、依赖性、性能和使用场景等方面存在显著区别。‌
65 2
|
1月前
|
XML Java 数据格式
Spring的IOC和AOP
Spring的IOC和AOP
45 0
|
2月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
61 1
|
15天前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
49 1
什么是AOP面向切面编程?怎么简单理解?