Spring之AOP基础

名称含义

     Aspect Oriented Programming(AOP)是较为热门的一个话题。AOP,国内大体译做“面向方面编程”。正则表达式

    “面向方面编程”,这样的名字并非很是容易理解,且容易产生一些误导。笔者不止一次听到相似“OOP/OOD11即将落伍,AOP是新一代软件开发方式”这样的发言。显然,发言者并无理解AOP的含义。Aspect,没错,的确是“方面”的意思。不过,华语传统语义中的“方面”,大多数状况下指的是一件事情的不一样维度、或者说不一样角度上的特性,好比咱们常说:“这件事情要从几个方面来看待”,每每意思是:须要从不一样的角度来看待同一个事物。这里的“方面”,指的是事物的外在特性在不一样观察角度下的体现。而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。因此笔者更倾向于“面向切面编程”的译法。编程

    能够经过预编译方式和运行期动态代理实如今不修改源代码的状况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提升代码的灵活性和可扩展性,AOP能够说也是这种目标的一种实现。设计模式

    在Spring中提供了面向切面编程的丰富支持,容许经过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该作的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。安全

主要功能

    日志记录,性能统计,安全控制,事务处理,异常处理等等架构

主要意图

    将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,经过对这些行为的分离,咱们但愿能够将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。性能

实现

    AOP 是一个概念,一个规范,自己并无设定具体语言的实现,这实际上提供了很是广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它可以和 Java 配合起来使用。编码

    介绍 AspectJ 的使用和编码不是本文的目的,你能够在 Google 上找到不少有关它的材料。spa

    这里只是重温 AspectJ 中几个必需要了解的概念:设计

  • Aspect: Aspect 声明相似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。代理

  • Joint point:表示在程序中明肯定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还能够嵌套其它 joint point。

  • Pointcut:表示一组 joint point,这些 joint point 或是经过逻辑关系组合起来,或是经过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

  • Advice:Advice 定义了在 pointcut 里面定义的程序点具体要作的操做,它经过 before、after 和 around 来区别是在每一个 joint point 以前、以后仍是代替执行的代码。

下面要讨论的这些问题,也许正是接触了 AOP 以后所困惑的。

    AOP 帮助咱们解决了新的问题没有?

    AOP 并无帮助咱们解决任何新的问题,它只是提供了一种更好的办法,可以用更少的工做量来解决现有的一些问题,而且使得系统更加健壮,可维护性更好。同时,它让咱们在进行系统架构和模块设计的时候多了新的选择和新的思路。

相关文章
相关标签/搜索