博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

什么AOP?

Posted on 2010-01-22 12:11  郭子  阅读(244)  评论(0编辑  收藏  举报

  前一段时间,在网上查资料的时候,看到一些应用程序架架方面的技术。其中就有Web Sharp,在这个应用程序框架的介绍之中提到了AOP(面向方面的编程)。AOP是为了解决在进行应用程序的编程过程中,主要业务逻辑功能和次要的支持业务逻辑的功能混合在一起的问题提出来的。为了把主要的业务逻辑和次要的支持性的功能分离开,要采取一些方向。综合对这个问题的分析,对于这两者混合在一起称之为代码纠缠,或功能分散。就是说一些如对于日志记录等问题,总是分散到各个对象中去,这就形成了功能的分散。
  AOP的主要概念就是:

  接入点 Join Point

    对应于类的一个方法或其它结构

  横切关注点 cutPoint

    即对于次要功能的调用接口,将类的方法签名赋值给一个切入点

  建议 Advice

    即实现次要功能逻辑,对切入点提供处理建议

  方面 aspect

    对cutPoint和Advice的封装

  最后要做的工作就是要把方面和主要的关注点连接在一起,这个过程就叫做织入。其实织入的的过程就是把方面的代码就像是宏一样的扩展到程序中去,在我们组织程序的时候实现的是关注点的分离,而在编译的时候要将其联合起来。
      对于AOP的学习,我认为应该从AspectJ开始学起。学习一门技术的最好方式就是去实践它,从实践中带着问题去体会理论的意义。然后再去学习理论,这样就降低了理论学习的门槛,也容易出成果。我采取的方式正是这个方法,从目前来看取得了不错的效果。在没有学习AspectJ之前,我总是对AOP感觉到很不实在,很模糊的感觉。但是学习一点AspectJ以后,就觉得没有那么可怕了,可以说是思想体会的比以前要深切一些。
     对于AOP,我觉得是为了解决一个单一的问题而提出来的。思想是很简单的,只是要去实现的时候会考虑很多的问题,这样就引出了一系列支持的技术,这就像是AOP中的关注点横切问题一样的。当你进行工作的主要目的是A的时候,同时你也要实现B、C等一些掺杂在一起的需要考虑的问题。这就是说要把握住问题的实质,你所采用的这项技术解决了一个什么样的问题,主要目的就是为了解决这个问题,以此为中心衍生了一些支持性的技术和名词。关键的东西把握了,次要的东西自然就随着问题的提出显现出来,成为必须要解决的问题,这就是原理。
     对于学习的方法也是一个指导。我们学习一门技术的时候不要只是从原理开始学,当一个原理很深入的技术出现的时候,最好是从最容易的做起,这样循序渐进却是最快的做法。

 

原文地址:http://www.cnblogs.com/luohuarenduli/archive/2007/03/30/694370.html