目录
AOP概念
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
记忆:AOP即面向切面编程和OOP(面向对象编程)类似也是一种编程思想
AOP的作用
AOP采用横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。
主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
简单地说,AOP的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。AOP就是代理模式的典型应用。
AOP框架
目前最流行的AOP框架有两个
-
Spring AOP
Spring AOP 是基于 AOP 编程模式的一个框架,它能够有效的减少系统间的重复代码,达到松耦合的目的。
Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。
有两种实现方式:基于接口的JDK动态代理和基于继承的 CGLIB 动态代理。
-
AspectJ
AspectJ 是一个基于 Java 语言的 AOP 框架,从 Spring 2.0 开始,Spring AOP 引入了对 AspectJ 的支持。AspectJ 扩展了 Java 语言,提供了一个专门的编译器,在编译时提供横向代码的植入。
扩展了Java语言 提供了一门编译器 ,在编译时提供横向的代码织入。
AOP编程术语
Target 目标类
指需要被代理的目标类
Joinpoint 连接点
是指那些可能被拦截的方法
Pointcut 切入点
在哪些类、哪些方法上需要增强的地方
Advice 通知/增强
增强方式、增强代码(前置通知、后置通知、返回后通知、抛出异常通知、环绕通知)
通知 | 说明 |
before(前置通知) | 通知方法在目标方法调用之前执行 |
after(后置通知) | 通知方法在目标方法返回或异常后调用 |
after-returning(返回后通知) | 通知方法会在目标方法返回后调用 |
after-throwing(抛出异常通知) | 通知方法会在目标方法抛出异常后调用 |
around(环绕通知) | 通知方法会将目标方法封装起来 |
Weaving 植入
把增强的方法应用在目标对象Target来创建新的代理对象Proxy的过程
Proxy 代理类
指生成的代理对象
Aspect 切面
切入点(需要增强的位置) + 增强(对需要增强位置的增强方式)
AOP的优点
AOP 是 Spring 的核心之一,在 Spring 中经常会使用 AOP 来简化编程。在 Spring 框架中使用 AOP 主要有以下优势。
-
提供声明式企业服务,特别是作为 EJB 声明式服务的替代品。最重要的是,这种服务是声明式事务管理。
-
允许用户实现自定义切面。在某些不适合用 OOP 编程的场景中,采用 AOP 来补充。
-
可以对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时也提高了开发。