spring AOP机制

AOP思想

  • AOP面向切面编程思想是对 OOP面向对象思想的一种补充,OOP思想通过封装、继承和多态性等概念来建立一种对象层次结构。
  • 但是当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。比如日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。这种散布在各处的无关的代码被称为横切代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
  • 而AOP技术则恰恰相反,它可以解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。
  • 所谓“方面”,就是将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统的重复代码,降低模块间的耦合度。
  • AOP的底层通过spring提供的动态代理技术实现的。在运行期间,spring通过动态代理技术动态的生成代理对象,代理对象执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

AOP的一些概念

  • 连接点(join point): 连接点表示可以用于增强的方法。

  • 通知(Advice): 通知描述了切面何时执行以及如何执行增强处理。

  • 切点(PointCut): 指我们对哪些方法进行增强。切入点是连接点的一部分。

  • 切面(Aspect): 切面是通知和切点的结合。

  • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。

  • 织入(Weaving): 把增强应用到目标对象来创建新的代理对象的过程。

  • Target(目标对象):要被增强的对象

  • Proxy(代理对象):一个类被AOP织入后会产生一个结果代理类。

常用AOP通知类型

  • before(前置通知): 在方法开始执行前执行
  • after(后置通知): 在方法执行后执行,无论是否发生异常都会执行
  • afterReturning(返回后通知): 在方法执行成功后执行
  • afterThrowing(异常通知): 在方法抛出异常后执行
  • around(环绕通知): 将整个目标方法包裹

通知的执行顺序

  • 没有发生异常时: 前置通知 目标方法 返回通知 后置通知
  • 发生异常时:前置通知 目标方法 异常通知 后置通知

AOP的实现步骤

  • 编写目标类和目标方法(连接点)
  • 编写切面类和通知方法
  • 在切面类中使用注解配置织入关系。
  • 开启组件扫描和AOP的自动代理。
  • spring会监控切入点方法的执行,一旦监控到,便使用代理机制,动态创建目标对象的代理对象,将增强对应的功能织入,完成完整的代码逻辑运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值