美文网首页
spring AOP

spring AOP

作者: 垂直居中的句号 | 来源:发表于2021-05-12 16:33 被阅读0次

AOP 通过预编译的方式和运行期动态代理的方式实现在不修改源代码的情况下给程序增加功能的一种技术。
编程思想就是把类对象的横切问题点,从业务逻辑中隔离出来,提高了代码复用性,和达到解耦的目的。

应用场景
1.日志记录
2.异常处理
3.权限验证
4.缓存处理
5.事务处理
6.数据持久化
7.效率检查 :检查哪些代码耗时较大
8.内容分发:

Aspect
aspect 切面,包括切点和通知,包括横切逻辑的定义也包括连接点的定义
pointcut 切点,每个类都拥有多个连接点,pointcut是切点的结合
joinpoint:连接点,程序执行的特定位置,如某个方法调用前后。
weaving 织入 ,将增强添加到目标类的具体连接点的过程。
advice 通知,增强,是织入到目标类连接点上的一段代码,是增强到什么地方,增强什么内容,
target: 目标对象,通知织入的目标类。
AOP proxy 代理对象,即增强后产生的对象

通过JDK动态代理(基于接口实现)或CGLib代理在运行期(基于类的继承实现)在对象的初始化阶段织入代码的。

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

实现步骤
1.定义一个切面类Aspect
@aspect 、@component ,引入 spring-boot-starter-aop

  1. 定义切点 Pointcut
    定义切点,并定义切点在那些地方执行,采用@Pointcut注解完成,
    @Pointcut(“execution(public * com.package..(..))”)
    规则:修饰符(可以省略,不能用)+返回类型( 不限)+包名(com.package)+类()+方法()+参数((..)不限)
    @annotation(com.maven.aspect.MyAction) 注解切点

3.定义Advice通知
利用通知的5种类型注解 @Before、@After 、
@AfterReturning 、@AfterThrowing 、@Around 来完成在某些切点的增强动作,如@Before("mypointcut()")

相关文章

网友评论

      本文标题:spring AOP

      本文链接:https://www.haomeiwen.com/subject/hnoodltx.html