AOP概述

本文介绍了AOP的概念,如何通过预编译和运行时代理在不改动源码情况下为程序添加功能。重点讲解了SpringAOP中的关键概念,如切面、切点、通知、Weaving、通知类型以及@Aspect驱动的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AOP

AOP概念

AOP(Aspect Oriented Programming),意为:面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP的编程思想就是把很多类对象中的横切问题点,从业务逻辑中分离出来,从而达到解耦的目的,增加代码的重用性,提高开发效率。

在这里插入图片描述
在这里插入图片描述
产生的问题
• 很多类对象和Logger仍然存在依赖关系
• 甚至每个类中的所有方法都需要调用Logger
• 如果修改了方法,需要修改N遍,不能一次修改完成改变

AOP应用场景

  • 日志记录
  • 权限验证
  • 事务处理
  • 效率检查
  • 异常处理
  • 缓存处理
  • 数据持久化
  • 内容分发

Aspect 概念

Spring AOP 中主要概念理解
  • aspect:切面,切面有切点和通知组成,即包括横切逻辑的定义也包括连接点的定义
  • pointcut:切点,每个类都拥有多个连接点,可以理解是连接点的集合
  • joinpoint:连接点,程序执行的某个特定位置,如某个方法调用前后等
  • weaving:织入,将增强添加到目标类的具体连接点的过程
  • advice:通知,是织入到目标类连接点上的一段代码,就是增强到什么地方?增强什么内容?
  • target:目标对象,通知织入的目标类
  • aop Proxy:代理对象,即增强后产生的对象

Spring AOP 底层实现,是通过JDK动态代理或CGLib代理在运行时期在对象初始化阶段织入代码的。

JDK动态代理基于接口实现 ----- 区别----- CGLib是基于类的继承实现

通知种类

Before advice
前置通知,即在自标方法调用之前执行。注意:即无论方法是否遇到异常都执行
After returning advice
后置通知,在目标方法执行后执行,前提是目标方法没有遇到异常,如果有异常则不执行通知
After throwing advice
异常通知,在目标方法抛出异常时执行,可以获取异常信息
After finally advice
最终通知,在目标方法执行后执行,无论是否是异常执行。
Around advice
环绕通知,最强大的通知类型,可以控制目标方法的执行(通过调用ProceedingJoinPoint.proceed()),可以在目标执行全过程中进行执行。

@Aspect 驱动

实现步骤

1:定义一个切面类Aspect
即在声明的类,增加@Component @Aspect 两个注解,Springboot中要引入 spring-boot-stater-aop依赖包
2:定义切点 Pointcut
定义切点,并定义切点在那些地方执行,采用@Pointcut解完成,如@Pointcut( public com.xxx.xxx.**(.))
规则:修饰符(可以不写,但不能用
)+返回类型 +那些包下的类+那些方法+方法参数“”代表不限,””两个点代表参数不限
3:定义Advice 通知
能用
)+返回类型 +那些包下的类+那些方法+方法参数“*”代表不限,””两个点代表参数不限
3:定义Advice 通知
利用通知的5种类型注解@Before、@After、@AfterReturning、@AfterThrowing、@Around来完成在某些切点的增强动作,如@Before(“myPointcutO”),myPointcut为第二步骤定义的切点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值