AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它允许将横切关注点(例如日志记录、事务管理、权限控制等)从业务逻辑中分离出来。
打个比方,想象您正在建造一座房子。房子的主体结构就像是业务逻辑,比如客厅、卧室、厨房等的建造。而一些通用的功能,比如给房子安装电线、铺设管道、安装防火设备等,就类似于横切关注点。
在传统的编程方式中,您可能需要在每个房间(业务方法)的建造过程中都去考虑和处理这些通用功能,这会让代码变得混乱且重复。
而 AOP 就像是有一个专门的团队来处理这些通用功能,您只需要告诉 AOP 在哪里(哪些方法或代码段)需要应用这些通用功能,AOP 会自动帮您处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Aspect
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect. class );
@Before ( "execution(* com.example.demo.service.*.*(..))" )
public void logBefore(JoinPoint joinPoint) {
logger.info( "调用方法: " + joinPoint.getSignature().getName());
}
}
|
在上述代码中,@Aspect
注解表明这是一个切面类。@Before
注解表示在目标方法执行之前执行该切面逻辑。execution(* com.example.demo.service.*.*(..))
是切点表达式,表示匹配 com.example.demo.service
包下的所有方法。
通过这种方式,无需在每个业务方法中单独编写日志记录代码,AOP 会自动在匹配的方法执行前进行日志记录。
<h1>关于AOP编程切点、通知、切面的理解</h1>
切点(Pointcut):
切点就像是在房子中的特定位置或区域,比如在每个房间的门口,或者在厨房的炉灶位置。它定义了在哪些具体的点上应用切面的功能。
比如说,在 AOP 编程中,您可以定义一个切点为“所有以 save
开头的方法”,这就像是指定在房子中所有卧室的门口这个特定位置进行某些操作。
通知(Advice):
通知类似于在切点位置要执行的具体操作或任务。比如在指定的位置安装灯具、安装插座等。
例如,“在方法执行前记录日志”就是一种通知,就好像在进入房间门口时先打开一盏灯。
通知有多种类型,像 @Before
(在方法执行前)、@After
(在方法执行后)、@Around
(环绕方法执行)等。
切面(Aspect):
切面可以想象成一个包含了一系列相关操作和规则的工具包或者施工方案。它把切点和通知组合在一起,形成一个完整的可复用的模块。
比如,一个包含了在特定切点(如所有卧室门口)执行特定通知(如安装灯具)的一整套方案就是一个切面。它规定了在哪些地方做什么事情。
通过这样的比喻,希望能让您更形象地理解 AOP 编程中的切点、通知和切面的概念。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律