Spring核心(四)AOP介绍

来源:互联网 发布:医疗大数据面临的问题 编辑:程序博客网 时间:2024/05/18 00:12

http://zhangll98.iteye.com/blog/1558060

接着上一篇    Spring核心(三)IoC使用   往下讲

          AOP即Aspect Oriented Programming的,意为面向切面编程,以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP是横向插入的一种技术,我觉得切面这个“切”字用的很准确,很形象。这个感觉就是在不影响业务的总体纵向流程的情况下横向切进了一段逻辑。

具体介绍

AOP涉及到多个术语,这是AOP的核心

   1、横切关注点:跨越应用程序多个模块的功能

(软件系统,可看作由一组关注点即业务或功能组成。其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。)

   2.切面(Aspect):横切关注点被模块化的特殊对象

   3.通知(Advice): 切面必须要完成的工作

   4.目标(Target): 被通知的对象

   5.代理(Proxy): 向目标对象应用通知之后创建的对象

   6.切入点(PointCut): 切面通知执行的“地点”的定义

   7.连接点(Jointpoint): 与切入点匹配的执行点


 

          AOP 的主要编程对象是切面(aspect), 横切关注点抽象(模块化)即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是横切性关注点的抽象。

 

这几个术语的描述比较抽象,我们通过一个简单例子来简单说明。

 

         假如我的DAO层在执行增删改的时候需要验证权限,而这个权限的验证跟我真正的业务流是没有关系的,所以我可以把这个权限验证的功能抽出来。这个权限验证的功能或者说业务就是横切性关注点,是我要关注的部分。

 

         然后我把这个功能单独拿出来,写个类。这个类就是切面(Aspect),切面是横切关注点的抽象,模块化。

 

        在切面这个类里,我可以写个方法,这个方法是具体执行权限验证的。这个方法就是我们定义的通知(Advice),描述了具体要执行的工作。

 

        此外,还要说明切入点(PointCut),即我们定义的advice要执行的地方,在这个例子中,切入点(PointCut)就是Dao层里的增删改方法。在切入点(PointCut)中涉及到切入的语法,在这里不再细说,推荐一片博客,里面讲的挺全:http://blog.csdn.net/kjfcpua/article/details/7513273

 

 

应用 AOP 编程特点:

 

        仍然需要在定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里.

使用AOP起到的作用:

        利用AOP横向添加的进去的功能一般与主体业务无关,且复用性高。例如日志记录,性能统计,安全控制,事务处理,异常处理等。

将这些比较公用的逻辑从业务主逻辑代码中划分出来,通过分离,我们可以将它们独立到非主导业务逻辑的单独方法中。

 

        这样就把与对业务逻辑无关的逻辑部分进行隔离,从而改变这些行为的时候不影响业务逻辑的代码。使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时因为高复用而提高了开发的效率。

 

 

总结

        AOP不仅是Spring的核心,也是OOP思想的延续。AOP是在OOP设计的基础上,针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

 

       所以AOP不是要替代OOP,只是在促使OOP更好,是对OOP的补充。

AOP不仅是技术,她跟OOP一样,是一种编程思想。