基于AOP的技术研究与探讨

来源 :硅谷 | 被引量 : 0次 | 上传用户:chuai09
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]软件工程的一条重要原则是功能点分离,将不同的功能分离于各自的模块中来实现程序的结构化。现在的大多数软件都采用面向对象的开发方法,通过识别对象来分解业务逻辑对象。但是面向对象也有其局限性,对很多问题并不能很好地加以分解和隔离。面向方面编程(Aspect-oriented Programming, AOP)作为面向对象编程(OOP,Object Oriented Programming)的一种补充,它成功的通过将横切点分离,解决面向对象编程上在功能点分离上的不足。就是在这样的背景下对AOP技术进行研究和探讨,希望对相关人员有所帮助。
  [关键词]AOP OOP 对象 切面
  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0810094-01
  
  一、引言
  
  OOP技术的出现在很大程度上解决了现实中存在的部分问题,对于软件系统的开发方式产生了极大的影响。从某些方面来看,OOP采用的具体方法是用分解的方式,将完整的软件系统划分为相对较小的、易于分析和理解的模块,从而方便地进行各个功能模块的设计和编码。但是如果我们将实现系统业务功能的模块看作系统的纵向分解单元的话,那么问题也就来了。通过简单的分析,可以看出,上述分散在功能模块中的功能与行为之间形成了一种横向的方面,而方面与模块形成了横切(Crosscutting),继而造成传统的编程技术无法将方面模块化,两种代码纠结在一起。造成代码纠结的原因是在传统的编程技术中,软件系统中非业务功能实现的代码无法模块化,它们散布在实现业务功能的代码中,继而造成这种情况。与此同时,OOP它在本质上是静态的,因此需求上的任何细微变化都有可能对软件开发的整体进度造成重大影响。在这样的背景下,Gregor Kiczales于1997年在ACM Communication上发表论文《Aspect-oriented Programming》,第一次提出了面向方面编程。
  
  二、将AOP引入问题领域
  
  日常中,我们运用OOP来进行软件开发时,很多时候问题领域的某些对象恰恰并不属于业务逻辑范畴,然而却在系统中广泛分布。最常见的例子就是日志和权限检查。以日志为例,它在系统中处处存在,然而就问题领域来说,日志和业务逻辑毫无关系。对于面向对象来说,传统的解决方案是将日志功能声明成一个类或接口来实现日志功能,然后让需要此功能的对象来继承或者引用这个类,进行功能调用。这就要求调用方要手动编码,日志功能的存在与否要依赖于程序员是否记得进行相应的调用。从另一方面说,如果日志功能需要进行修改和变动,那么很可能所有的调用函数可能都要进行修改。这样的修改将会遍布整个系统,无疑会增加出错的几率和系统维护的难度。对于类似于日志这样的功能,它存在于系统的各个模块之间,但又不属于某个具体的业务逻辑对象,在AOP中被称为“横切关注点”。OOP侧重于通过继承来描述对象之间的泛化-特化关系,这是一种“纵”的关系;而AOP则关注的是各种对象之中所共存的一种“横切”关系。AOP便是通过记录代码中各个关注点的位置来将这些散落在系统各处的功能实现统一在一个模块之中。
  开发者通过对关注点的分离,将横切的功能以模块化的形式来表现,使得代码更易于维护和重用。AOP并不想替代OOP或者其他基于对象的方法。相反AOP作为OOP的补充,通过支持一种新的从组件分离出方面的方式,用来弥补OOP的缺陷。
  
  三、AOP结构
  
  面向方面编程是一个崭新的程序结构模式,作为面向对象程序设计的补充,它影响力是深远而悠长的,作为一种新的技术,它提出许多全新的概念。下面先介绍一下AOP中各个重要概念的定义:
  (一)关注点(concern)
  一个关注点可以是一个特定的问题、概念、或是应用程序的应用域总而言之,应用程序必须达到的一个目标。
  (二)横切关注点(crosscutting concern)
  如果一个关注点的实现代码散落在很多个类或方法之中,就像前面那个“安全检查”的例子那样,我们就称之为“横切关注点”。
  (三)连接点(joint point)
  连接点是代码中一个明确定义的位置,关注点将在这里横切应用程序。连接点可以是方法调用、构造函数调用、异常处理程序、或者程序执行中的其他点。
  (四)切入点(pointcut)
  一组连接点的总称,用于指定某个增强何时应该被调用。切入点可以用正则表达式或通配符来描述。有些AOP实现技术还支持切入点的组合。
  (五)方面(aspect)
  方面是AOP的模块单元,其地位就相当于面向对象程序设计中的类,它将连接点、通知以及类型间声明封装在一起。同类相似,方面也可以有自己的成员函数和变量,从其他类或者方面扩展以及实现接口等。与类不同的是方面的构造(construct)是由AOP框架来构造的,不能像类一样使用new关键字来显式生成实例。
  (六)编织(weaving)
  当方面模块被编写完毕之后,AOP语言编译器负责将方面模块中代码织入到被连接点标记的宿主代码中去,这个过程称作为编织。根据编织时机的不同有编译时编织和运行时编织的不同。
  
  四、AOP语言的实现机制
  
  AOP将分散于系统各处的代码通过连接点和增强统一在各自的方面中,从而实现了横切关注点的模块化。这里并不打算深入讨论AOP框架的实现机制,但从最终用户的角度上说,简单了解AOP框架的一些常见实现策略对具体使用AOP会有很大的帮助,下面就是用于实现AOP技术的主要策略,按照功能由弱至强排列:
  1.动态代理
  2.动态字节码生成
  3.Java代码生成
  4.使用定制的类加载器
  5.语言扩展
  
  五、AOP的开发步骤
  
  AOP从其本质上来讲,就是用一种松散耦合的方式来实现各个独立的关注点,然后在组合这些实现来建立最终的系统,用它所建立的系统是松散耦合的。面向方面程序的开发分三个清晰的开发步骤,如图所示:
  


  (一)关注点分解
  分解需求提取出各个横切关注点,并识别和记录方面所在连接点。在这一步里,需要把核心关注点同系统级的横切关注点分开。横切关注点的划分通常满足以下几个条件:
  1.关注点所实现的功能横跨了多个模块
  2.关注点与核心业务相对独立,不属于同一问题域
  3.关注点不属于系统的业务功能范畴
  (二)关注点实现
  根据AOP程序的结构将各自的关注点独立进行实现,完成功能实现。
  (三)进行代码编织
  通过织入器,将各个关注点同原有程序连接重组在一起。
  
  五、结束语
  
  应该说,AOP这个领域还很新,未来可能会有越来越多的大型项目采纳AOP。从某种意义上来看,AOP并不是一种取代传统编程技术的技术,而是对这些技术的有机补充,它解决了一些传统技术无法很好处理的问题。对IT部门来说,一个特征全面的AOP架构,也将显示出EJB的强大功能,并给更加广阔的用户群带来真正意义上的企业级开发,IT部门可以施行更广泛的服务,并且从更高的效率和更快的发展中获利。
  
  参考文献:
  [1]李磊、程立、周悦虹译. Spring in Action中文版.人民邮电出版社,2006.3.
  [2]Ramniva Laddad. I want my AOP! http://www.javaworld.com/ 2002-2.
  
  作者简介:
  韦振远,吉林大学珠海学院电子信息系,电子信息科学与技术专业。
其他文献
[摘要]就3G无线网络规划的核心问题以及规划方法进行讨论,对3G网络中应重点考虑的传播模型修正、容量与干扰、远近效应、导频污染等问题进行讨论,同时给出3G无线网络规划的应遵循的原则以及实施建议,进而指导工程实践。  [关键词]3G 网络规划 容量 干扰 覆盖  中图分类号:TN929.533 文献标识码:A 文章编号:1671-7597(2008)0810029-01    一、前言    随着通
期刊
[摘要]ARP协议由于固有的缺陷,在接受APR数据包时,不要求认证,使得伪造ARP数据包进行ARP欺骗变得很容易。在校园网环境下,ARP欺骗(攻击)尤为明显,严重的影响了日常的网络使用。PPPoE是在标准PPP报文的前面加上以太网的报头,PPPoE在通讯过程中不涉及ARP协议,由此可以避免ARP欺骗。  [关键词]APR 欺骗 PPPoE  中图分类号:TP3 文献标识码:A 文章编号:1671-
期刊
[摘要]简略介绍10kV电力电缆施工的几个注意事项。  [关键词]10kV电缆 型号 敷设 电缆头 机械损伤  中图分类号:TM3文献标识码:A 文章编号:1671-7597(2008)0810054-01    随着我国城市化进程的加快,市容市貌越来越成为人们注目的焦点,原有的城市架空线路逐步被电缆所替代,城市无杆化已成为城建工作的重要部分,加上城市建设道路拓宽等原因,市区内10kV电缆施工量越
期刊
[摘要]简要介绍EDA技术的基本特点,论述EDA技术及其发展。基于VHDL的自顶向下的设计方法,比较EDA技术与传统电子设计方法的差异,给出电子设计领域的全新理念。  [关键词]EDA VHDL应用 FPGA  中图分类号:TN7 文献标识码:A 文章编号:1671-7597(2008)0810021-01    一、引言    20世纪末,电子技术得到了飞速发展,电子设计自动化(EDA)技术,加
期刊
[摘要]随着3D GIS的不断发展,利用3D GIS技术管理矿产资源储量,分析矿产资源的空间分布,已成为矿产资源管理的必然趋势。主要介绍Micromine和MapGIS在辽宁省矿产资源储量管理中的应用。通过利用这两个软件,辽宁省矿产资源储量管理实现了从矿区范围到储量计算范围、从表层到深层、从二维到三维、从宏观到微观的储量管理体系,矿产资源储量管理水平上了一个新台阶。  [关键词]储量管理 Micr
期刊
[摘要]基于构件的软件开发是软件工程化的必然趋势。首先对构件技术简要介绍,然后对ERP系统进行分析,提炼系统功能的共性,研究将构件技术引入ERP系统的设计和实现,给出基于构件技术的ERP系统应用服务器端的设计。最后对工作进行总结,并指出今后的研究重点。  [关键词]ERP 构件 构件组装  中图分类号:TP315文献标识码:A 文章编号:1671-7597(2008)0810044-01    一
期刊
[摘要]设计采用单片机与FPGA开发系统实现数字示波器,阐述示波器的实现原理及过程,利用AD783做取样保持电路,对被测信号进行实时采样并保持,将采样信号送入FPGA,进行实施采样和等效采样,实现对信号的完整取样并还原波形,再由单片机处理,最后实现 LCD显示和键盘操作。对各功能模块、电路原理进行分析,实测表明系统实时采样频率和等效采样频率范围覆盖1KHz~100MHz,输入阻抗大于1MΩ。设计模
期刊
[摘要]目前,随着J2ee技术平台的逐渐成熟和完善,基于它的企业级的Web应用开发也越来越多,大部分的Web应用在层的划分上一般可以被分成4层,分别是:表示层、业务逻辑层、持久层和域模块层,每层在处理程序上都应该有明确的责任,不应该在功能上与其他层混合,并且每层要与其他层之间分开,降低彼此直接的耦合度,详细的分析基于JSH框架的多层架构的各层的具体功能,希望对大家有所帮助。  [关键词]Jsf S
期刊
[摘要]雷达信号视频信号对于雷达信号处理系统的调试、标校、性能检测有重要的意义。采用基于FPGA的DDS软件编程实现了雷达视频信号的模拟,并以雷达相参视频信号和雷达非相参视频信号的模拟为例,详细分析了该方法实现雷达信号模拟的原理及具体过程。最后给出了雷达视频信号模拟的部分实验结果。  [关键词]雷达 信号模拟 FPGA DDS   中图分类号:TN95 文献标识码:A 文章编号:1671-7597
期刊
中图分类号:TH12 文献标识码:A 文章编号:1671-7597(2008)0810085-02    内燃机车柴油机连杆螺栓自动测量控制试验台是对原连杆螺栓试验台(俗称:内燃机车曲轴连杆螺栓把对机)进行全面数控技术改造的新型设备,也是针对铁路内燃机车G型连杆螺栓专项检修工装、仪器技术改造而设计的专用工装。它符合机车连杆螺栓的检修工艺规范及要求。它以工艺螺栓为标准,自动检测螺栓的拉伸量,完成对连
期刊