转自:
AOP:“Aspect Oriented Programming”,即面向切面编程,和 OOP(面向对象编程它是一种全新的编程思想
AOP的核心是采用(动态代理)会方法增强相应的功能,
使用AOP可减少代码的重复,为代码扩展带来了遍历性,常见的应用如:
事务处理、日志管理、权限控制、异常处理等
AOP的主要功能: 分离功能性需求和非功能性需求,
使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性
通俗的讲:
AOP可以在不改变源代码的情况下,为业务块添加一种通用的功能,AOP底层是借助代理模式进行实现
目前比较流行的AOP框架有两个: 一、Spring AOP 二、AspectJ
Spring AOP:
是基于AOP编程模式的一个框架,它能够有效的减少系统间的重复代码,达到松耦合的目的
Spring AOP 使用纯 Java 实现,无需使用其它的类加载器, 是使用代理方式向目标类植入增强的代码
目前有两种方式实现:
基于接口的 JDK 动态代理和基于继承的 CGLIB 动态代理。
AspectJ:
是一个基于 Java 语言的 AOP 框架,从 Spring 2.0 开始,Spring AOP 引入了对 AspectJ 的支持
AspectJ 扩展了 Java 语言,提供了一个专门的编译器,在编译时提供横向代码的植入
为什么使用AOP
AOP变成模式,可在实际逻辑运行之前,之后,或周围等一些关注点上,运行指定的代码,如下例所示:
class javaTest{ public void a1(){...} public void a2(){...} public void a3(){...} public void b1(){...} public void b2(){...} public void b1(){...} public void c1(){...} public void c2(){...} } 想实现在使用a开头的方法上添加发送通知的功能, 在以前没有AOP时,我们需修改a开头方法的代码, 那么今天有了AOP,我们可以在不修改源代码的情况下对方法进行增加,这就是我们需使用AOP的原因
AOP常见术语
名称 | 说明 |
Joinpoint(连接点) | 指那些被拦截到的点,在 Spring 中,指可以被动态代理拦截目标类的方法 |
Pointcut(切入点) | 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点 |
Advice(通知) | 指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容 |
Target(目标) | 指代理的目标对象 |
Weaving(植入) | 指把增强代码应用到目标上,生成代理对象的过程 |
Proxy(代理) | 指生成的代理对象 |
Aspect(切面) | 切入点和通知的结合 |
Advice | 直译为通知,也有的资料翻译为“增强处理”,共有 5 种类型,如下表 |
增强处理的类型
通知 | 说明 |
before(前置通知) | 通知方法在目标方法调用之前执行 |
after(后置通知) | 通知方法在目标方法返回或异常后调用 |
after-returning(返回后通知) | 通知方法会在目标方法返回后调用 |
after-throwing(抛出异常通知) | 通知方法会在目标方法抛出异常后调用 |
around(环绕通知) | 通知方法会将目标方法封装起来 |
通过以上的学习,我们可了解到AOP编程方式可对业务逻辑的各部分进行隔离,
使业务逻辑之间的耦合对降低,增强代码的可重用性,同时提高开发效率,
是Spring的核心