Spring AOP编程
AOP (Aspect Oriented Programming 的缩写,翻译为面向方面或面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续和有益补充,也是Spring框架中的一个主要内容。
利用AOP编程可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低(低耦合),提高程序的可重用性,同时提高开发的效率。
Spring AOP使用了两种代理机制:JDK动态代理和CGl ib动态代理,
AOP和OOP的区别
AOP(面向切面编程)和OOP(面向对象编程)在字面上虽然非常类似,但却是面向不同领域的两种编程思想,这两种编程思想在目标上有着本质的差异
横切关注点
在软件开发中,分布于应用中多处的功能被称为横切关注点
AOP主要功能
日志记录;性能统计;安全控制;事务处理;异常处理;
AOP术语
连接点(Joinpoint):项目运行时要把横切关注点放回去的位置
程序执行的某个特定位置(如类开始初始化前、类初始化后。类某个方法调用前、调用后、方法跑吹异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为连接点。
注意:Spring AoP仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强
切点(Pointcut):查询连接点的条件(指哪打哪,不是所有的连接点都放)
每个类一般都拥有多个连接点(一般一个方法就是一个连接点)。AOP需要定位到特定的连接点,而定位连接点的方式称为切点。连接点相当于数据库中的记录,而切点相当于查询条件,一个切点可以匹配多个连接点。
注意: Spring AOP中切点通过Pointcut接口定义,它使用类和方法作为连接点的查询条件。Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点
增强(Advice):要在连接点放回去的代码
增强是织入到目标类连接点上的一段程序代码。在 Spring AOP中,增强除用于描述一段程序代码外,还拥有另一个和连接点相关的信息-执行点的方位。结合执行点的方位信息和切点信息,AOP就可以找到特定的连接点。因为增强既包括了用于添加到目标连接点上的一段执行逻辑,由包含用于定位连接点的方位信息,所以Spring所提供的增强接口都带有方位名
引介(Introduction):放回去的代码在源代码的基础上加入新的代码在放回去
引介是一种特殊的增强,它为类添加一些属性和方法。即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
目标对象(Target):抽出来要放回去的对象
它是增强逻辑的织入目标类。通过AOP,业务逻辑类只需要实现非横切逻辑的代码,而性能监视、事务管理等横切逻辑则可以使用AOP动态织入到特定的连接点上。
织入(Weaving):织入是将增强添加对目标类具体连接点上的过程
AOP有三种织入方式:
编译器织入:要求使用特殊Java编译器
类装载期织入:要求使用特殊的类装载器
动态代理织入:在运行期为目标类添加增强生成子类的方式注意:**Spring AOP采用动态代理织入方式**(默认使用jdk代理,如果没有接口则使用cglib代理)
代理(Proxy):
一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类。所以,可以采用调用原类相同的方式调用代理类
切面(Aspect):
切面由切点和增强或引介组成。它既包括了横切逻辑的定义,也包括了连接点的定义
注意: Spring AOP负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。
__EOF__

本文链接:https://www.cnblogs.com/qizhiwei/p/17739584.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!