[Spring学习]07 Spring AOP面向切面编程

一、什么是Aop

OOP(Object Oriented Programming)面向对象编程。
AOP(Aspect Oriented Programming)面向切面编程。
OOP模块化的关键单元是类,AOP模块化的关键单元是切面。AOP是对OOP的补充。
Spring AOP是这种AOP思想的技术实现,它是Spring框架的一个重要组成部分。
Spring IOC容器并不依赖Aop,Aop做为Spring IOC容器的一个补充,使它成为一个强大的中间件解决方案。
在Spring框架中,AOP用于:

  1. 提供声明式企业服务,最重要服务是声明式事务管理。
  2. 允许用户实现自定义切面,用AOP来完善OOP的使用。

AOP采用"横切"的技术,剖解开封装的对象内部,将影响了多个类的公共行为封装到一个可重用模块。如:日志模块、权限模块、事务模块。
简单地说,动态地将代码切入到类的指定方法、指定位置上的编程思想就是AOP。

二、Aop相关术语

  • 切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象,是通知和切点的结合。如:事务管理、日志管理、权限管理都是一个切面。

  • 连接点(join point):在程序执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,一个连接点总是表示一个方法的调用。

  • 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
    Spring切面可以应用5种类型的通知:
    前置通知(Before):在目标方法被调用之前调用通知功能。
    后置通知(After):在目标方法完成之后调用通知,不关心方法的输出是什么。是“返回通知”和“异常通知”的并集。
    返回通知(After-returning):在目标方法成功执行之后调用通知。
    异常通知(After-throwing):在目标方法抛出异常后调用通知。
    环绕通知(Around):通知包裹了被通知的方法,可同时定义前置通知和后置通知。

  • 切点(PointCut): 可以插入增强处理的连接点。切点定义了在何处工作,也就是在哪个方法应用通知。

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

  • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。
    编译器:切面在目标类编译时被织入。这种方式需要特殊的编译器。
    类加载期:切面在目标类被引入应用之前增强该目标类的字节码。
    运行期:切面在应用运行的某个时刻被织入。

  • 目标对象(Target object):被一个或多个切面所通知的对象。也被称作被通知(advised)对象,该对象始终是代理对象。

  • AOP代理(AOP proxy):由AOP框架创建的一个对象,用于实现切面契约(例如通知方法执行等),在Spring框架中,AOP代理可以是JDK动态代理或CGLIB代理。

三、Aop的优点

  1. 使得每个关注点都集中于一个地方而不是分散在多处代码中,便于后期的统一维护管理。
  2. 服务模块更简洁,它们只包含主要关注点,而次要关注点的代码被转移到切面中了。
  3. 对原方法进行方法增强,且不影响原方法的正常使用。
  4. 配置可插拔,可在实际逻辑执行之前、之后或周围动态添加横切关注点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joinclear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值