Spring之AOP

一、什么是AOP:

  面向切面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

  AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。

  AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。

 二、AOP的存在价值:

  AOP 专门用于处理系统中分布于各个模块中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案:

 

  左图:有时候开发人员会在不同方法复制黏贴相同的代码段。这样要是修改代码段里头某部分,就要全部修改方法中的代码。

  右图:将公共部分代码抽离出来,然后每个方法单独调用,这样无需改变每个方法的代码段,但是还是要修改每个方法。

  而AOP的功能在于我无需修改每个方法里头,通过AOP代理去动态改变方法。

三、AOP的原理剖析

  AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用,AOP 代理所包含的方法与目标对象的方法如下图所示:

四、AOP的关键概念

以下是官方文档所给出的AOP的关键概念的解释:

  切面 - Aspect   类是对物体特征的抽象,切面就是对横切关注点的抽象

  连接点 - Join Point    被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

  通知 - Advice    所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

  切入点 - Point Cut    对连接点进行拦截的定义

  引入 - Introduction    在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段  

  目标对象 - Target Object    代理的目标对象

  AOP代理 - AOP Proxy

  织入 - Weaving    将切面应用到目标对象并导致代理对象创建的过程

五、AOP通俗的理解:

  一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其他方式,比如Spring中可以通过xml配置文件。这样就使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关。A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。

  更多参考:http://www.cnblogs.com/hongwz/p/5764917.html

 

 

 

posted @ 2017-04-17 10:33  shawWey  阅读(190)  评论(0编辑  收藏  举报