AOP相关概念明晰
AOP
(Aspect Oriented Programming)
面向切面编程
是通过预编译和运行期动态代理实现程序功能的统一维护的一种技术
是OOP的延续和有益补充,函数式编程的一种衍生范型
Spring中提供了AOP的丰富支持,允许分离应用的业务逻辑与系统级服务和事务管理进行内聚性的开发
横切关注点
通常,这些横切关注点从概念上是与应用的业务逻辑分离的(但往往直接嵌入到应用的业务逻辑之中),AOP的目标正是将这些横切关注点与业务逻辑隔离开来
DI(依赖注入)有助于应用对象之间的解耦,而AOP可以实现横切关注点与他们所影响的对象之间的解耦
AOP主要功能
日志记录
性能统计
安全控制
事务处理
异常处理
其他功能
连接点(Join point)
程序执行的某个特定位置
(如类开始初始化前、类初始化后。
类某个方法调用前、调用后、方法抛出异常后)。
一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为连接点(插入代码的位置)
注意: Spring AoP仅支持方法的连接点,
即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强
切点(Pointcut)
每个类一般都拥有多个连接点(一般一个方法就是一个连接点)。
AOP需要定位到特定的连接点,而定位连接点的方式称为切点。
连接点相当于数据库中的记录,而切点相当于查询条件,一个切点可以匹配多个连接点。(插入代码位置的查询条件)
注意: Spring AOP中切点通过Pointcut接口定义,它使用类和方法作为连接点的查询条件。
SpringAOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点.
增强(Advice)
增强是织入到目标类连接点上的一段程序代码。
在Spring AOP中,增强除用于描述一段程序代码外,还拥有另一个和连接点相关的信息-执行点的方位。
结合执行点的方位信息和切点信息,AOP就可以找到特定的连接点。
因为增强既包括了用于添加到目标连接点上的一段执行逻辑,由包含用于定位连接点的方位信息,所以Spring所提供的增强接口都带有方位名。
注意:增强有的教材也叫通知,是对Advice翻译不同而已。
引介(Introduction)
引介是一种特殊的增强,它为类添加一些属性和方法。
即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
目标对象(Target)
它是增强逻辑的织入目标类。通过AOP,业务逻辑类只需要实现非横切逻辑的代码,而性能监视、事务管理等横切逻辑则可以使用AOP动态织入到特定的连接点上。
织入(Weaving)
将增强添加到对目标类具体连接点上的过程
AOP有三种织入方式:
编译器织入:要求使用特殊的编译器
类装载器织入:要求使用特殊的类装载器
动态代理织入:在运行期为目标类添加增强生成子类的方式
代理(Proxy)
一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。
根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类。
所以,可以采用调用原类相同的方式调用代理类。
切面(Aspect)
切面由切点和增强或引介组成。
它既包括了横切逻辑的定义,也包括了连接点的定义。
切面=切面+增强(或引介)
注意: Spring AOP负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!