框架
spring
控制反转(IoC)和依赖注入(DI)
Spring AOP(面向切面编程)
Spring 事务
本文档使用 MrDoc 发布
-
+
首页
Spring AOP(面向切面编程)
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它通过预编译方式或者运行期动态代理实现程序功能的统一维护的技术。AOP 是 OOP(Object-Oriented Programming)的技术延续,主要用于处理系统中分布于各个模块的横切关注点(如日志记录、事务管理、安全性检查等),从而降低模块间的耦合度,提高代码的可重用性和可维护性 ## 核心概念 | 概念 | 定义与作用 | |-----------------|----------------------------------------------| | 切面(Aspect) | 横切关注点的模块化单元(如日志、权限验证),将公共逻辑集中管理。 | | 连接点(Join Point) | 程序执行中的具体位置(如方法调用、异常抛出),Spring AOP 仅支持方法级连接点。 | | 切入点(Pointcut) | 匹配一组连接点的规则(通过表达式定义),指定切面生效的位置。 | | 通知(Advice) | 切面在切入点处执行的逻辑,包括 Before、After、Around 等类型。 | | 目标对象(Target) | 被增强的对象(即被代理的原始对象)。 | | 织入(Weaving) | 将切面逻辑织入目标对象的过程,Spring AOP 在运行时通过动态代理实现。 | ## 实现方式 * 基于代理的实现(默认) * 原理:通过 JDK 动态代理(接口)或 CGLIB(无接口的类)实现。 * 适用场景:简单场景,无需复杂织入。 * 限制:无法拦截同一类内部方法调用。 * AspectJ 编译时织入 * 原理:在编译阶段通过 AspectJ 工具织入切面,性能更高。 * 适用场景:需要织入私有方法或构造器时。 * 配置:需添加 AspectJ 依赖并配置 @EnableLoadTimeWeaving。 ## 核心注解 | 注解名称 | 作用描述 | 使用场景示例 | |-----------------|---------------------------------------|---------------------------| | @Aspect | 定义一个切面类,将类标识为切面 | @Aspect 注解在类上,表示该类是一个切面 | | @Before | 定义前置通知,在目标方法执行前执行指定逻辑 | 在方法执行前记录日志、进行权限检查等 | | @After | 定义后置通知,在目标方法执行后执行指定逻辑,无论方法是否抛出异常都会执行 | 用于资源清理等操作 | | @AfterReturning | 定义返回通知,在目标方法正常执行完毕后执行指定逻辑,可以访问方法的返回值 | 统计方法执行结果、处理返回数据等 | | @AfterThrowing | 定义异常通知,在目标方法抛出异常后执行指定逻辑 | 进行异常记录、发送错误通知等 | | @Around | 定义环绕通知,可以完全控制目标方法的执行,决定是否执行目标方法以及何时执行 | 实现性能监控,记录方法执行时间;或者进行事务管理等 |
admin
2025年3月10日 09:52
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Rancher
Jenkins
ADMIN-UI
VBEN-ADMIN-UI
RUST-FS
MinIO
mindoc
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码