spring框架之AOP模块(面向切面),附带通知类型---超详细介绍

简介: spring框架之AOP模块(面向切面),附带通知类型---超详细介绍

一,AOP简介

    是Spring框架中的一个重要模块,它提供了一种通过面向切面编程的方式来实现横切关注点的模块化的方法。AOP可以将应用程序的核心业务逻辑与横切关注点(如日志记录、事务管理、安全性等)分离开来,从而提高代码的可维护性和可重用性。

简单来说:通过动态代理技术可以在目标对象的方法的执行前、执行后以及抛出异常时织入切面逻辑

比如:书籍的增删改,本身只需要完成增删改的功能即可,这是如果需要添加日志功能,那么需要在原有的代码基础上,去修改添加日志功能,受牵连的方法就三个(add/edit/del)了

1.1 核心概念!(专业术语)

1.1.1 切面(Aspect):

   切面是一个模块,用于封装横切关注点的行为。它由切入点和切面逻辑组成。

1.1.2 切入点(Pointcut):

   切入点定义了在哪些连接点上织入切面逻辑。连接点可以是方法的执行、异常的抛出等。

1.1.3 通知(Advice):

    通知是切面在特定切入点上执行的动作。Spring AOP提供了四种类型的通知:前置通知      (Before)、后置通知(After)、返回通知(After-returning)和异常通知(After-throwing)  

1.1.4 织入(Weaving):

 织入是将切面应用到目标对象并创建代理对象的过程。织入可以通过编译期间的编译期织入、类加载期织入或运行期织入来实现。

  总而言之,Spring AOP提供了一种有效的方式来实现横切关注点的模块化。它能够改善代码的可维护性和可重用性,简化开发过程,并促进松耦合的设计

二,通知(7种)

为了让大家更能理解

普通spring-Config ioc实列:

定义一个接口类一个实现类,定义两个方法购书,发表评论方法

接口类 :

实现类:实现接口类方法

需要一个异常类,以便后续抛异常处理

接下来就是spring ioc的配置,如果没有spring Config文件。那就是pom.xml文件没有配置好且配置的时候需要联网!

spring Config 配置

运行结果

2.1 前置通知

根据上面实列来进行前置通知

在目标方法执行之前执行的通知。前置通知可以访问和修改方法的参数。

定义一个类并继承MethodBeforeAdvice 该所被继承的类是前置通知的类

spring Config Ioc的配置

测试结果

2.2 后置通知

在目标方法执行之后(无论是否发生异常)执行的通知。后置通知不能访问方法的返回值

定义一个类并继承AfterReturningAdvice 该所被继承的类是后置通知的类

spring Config Ioc的配置:

运行结果

2.3 环绕通知

环绕通知是最强大和最灵活的通知类型。它将包围目标方法的执行,可以在方法执行前后自定义处理逻辑。环绕通知必须显式地决定是否继续执行目标方法

定义一个类并继承MethodInterceptor 该所被继承的类是环绕通知的类

spring Config Ioc的配置:

运行结果:

2.4 异常通知

在目标方法抛出异常后执行的通知。异常通知可以访问抛出的异常信息,并在必要时处理异常

定义一个类并继承ThrowsAdvice 该所被继承的类是异常通知的类

spring Config ioc文件

运行结果

2.5 过滤通知

在目标方法顺利执行并返回结果后执行的通知。返回通知可以访问并修改方法的返回值。

spring Config ioc文件配置即可

运行结果:

目录
相关文章
|
4月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
|
12天前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
10天前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
6月前
|
Java API 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
606 0
|
6月前
|
Java 开发者 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——什么是AOP
本文介绍了Spring Boot中的切面AOP处理。AOP(Aspect Oriented Programming)即面向切面编程,其核心思想是分离关注点。通过AOP,程序可以将与业务逻辑无关的代码(如日志记录、事务管理等)从主要逻辑中抽离,交由专门的“仆人”处理,从而让开发者专注于核心任务。这种机制实现了模块间的灵活组合,使程序结构更加可配置、可扩展。文中以生活化比喻生动阐释了AOP的工作原理及其优势。
230 0
|
Java Spring 安全
[Spring实战系列](16)面向切面编程(AOP)概述
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50651781 1. 简介 在软件中,有些行为对于大多数应用都是通用的。
1583 0
|
2月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
655 0
|
6月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
263 0
|
2月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
318 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
205 0