已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 方面化构件组装平台需要将横切关注点织入业务构件,其组装实 现依赖于方面编织。同时,按需计算中间件平台要求按照用户或数据 传输的需要,动态组合、编织计算模块,提高i n t e r n e t 服务的自动 化程度,这些要求的实现也依赖于方面编织技术。 本文主要研究方面的编织机制。首先,介绍了方面编织技术的背 景知识、技术特点和研究现状。提出了方面编织策略的分类方法,包 括方面实现策略和方面织入时间策略,结合上述策略深入分析了几种 主流a o p 系统的编织机制及其特点。 其次,针对方面化构件组装平台以及按需计算中间件平台需求, 提出了一种基于类修改和反射的动态方面编织模型d a w e a v e r ,阐述 了d a w e a v e r 的切入点模型、通知模型和方面模型。探讨了实现 d a w e a v e r 的关键技术,包括方面容器实现机制和类文件修改实现机 制,并给出了d a w e a v e r 的动态方面编织过程。 再次,为提高基于d a w e a v e r 的面向方面软件开发的效率,克服 手工编写方面配置文件带来的弊端,本文在所提出的方案基础上,提 供了基于d a w e a v e r 的可视化方面部署及运行环境,并给出了相关应 用示例。 最后,为检测d a w e a v e r 的编织效率,本文以3 b o s sa o p 为基准, 对比分析了已编织目标系统的执行效率,对实验结果给出了相应的分 析,并总结了全文研究工作,阐述了进一步的研究方向。 关键词动态方面编织,编织策略,方面化构件,b c e l ,方面容器 a bs t r a c t a s p e c t u a lc o m p o n e n ta s s e m b l i n gp l a t f o r m h a st ow e a v ec r o s s - c u t c o n c e r n si n t ob u s i n e s sc o m p o n e n t s i t sa s s e m b l i n gp r o c e s s r e l i e so n a s p e c tw e a v e r m e a n w h i l e ,c o m p u t i n go nd e m a n dm i d d l e w a r ep l a t f o r m r e q u i r e sd y n a m i cc o m p o s i t i n g a n dw e a v i n gt h e c o m p u t em o d u l e s a c c o r d i n g t ou s e rr e q u i r e m e n t so rn e t w o r ks p e e d , p r o m o t i n g t h e a u t o m a t i c d e g r e e o fi n t e r n e ts e r v i c e 1 h ei m p l e m e n t s o ft h o s e r e q u i r e m e n t sr e l y0 1 1t h ea s p e c tw e a v i n gt e c h n o l o g y t t l i st h e s i sm a i n l yr e s e a r c h e s0 1 1a s p e c tw e a v i n gm e c h a n i s m f i r s t l y , t h i st h e s i si n t r o d u c e st h eb a c k g r o u n do ft h ea s p e c tw e a v i n gt e c h n o l o g y , a sw e l la si t sf e a t u r e sa n dr e s e a r c hs t a t u s i tp r o p o s e st h ec l a s s i f i c a t i o n m e t h o do fa s p e c tw e a v i n gs t r a t e g y , i n c l u d i n ga s p e c ti m p l e m e n t a t i o n s t r a t e g ya n dw e a v i n gt i m es t r a t e g y m e a n w h i l e ,t h i st h e s i sa n a l y z e st h e w e a v i n gm e c h a n i s ma n dt h ef e a t u r e so ft h ec u r r e n ta s p e c to r i e n t e d p r o g r a m m i n g ( a o p ) s y s t e m s s e c o n d l y , t h i st h e s i sp r o p o s e sak i n do fd y n a m i ca s p e c tw e a v i n g m o d u l ed a w e a v e rb a s e d0 1 1c l a s sm o d i f i c a t i o na n dr e f l e c t i o n ,a c c o r d i n g t ot h er e q u i r e m e n t so fa s p e c t u a lc o m p o n e n ta s s e m b l i n gp l a t f o r ma n d c o m p u t i n go nd e m a n dm i d d l e w a r ep l a t f o r m i tg i v e s t h ep o i n t c u tm o d u l e , a d v i c em o d u l ea n da s p e c tm o d u l eo fd a w e a v e r , a n d t h e nd i s c u s s e sa b o u t t h ek e yt e c h n o l o g i e si nr e a l i z i n gd a w e a v e r , i n c l u d i n gt h ei m p l e m e n t o f a s p e c tc o n t a i n e ra n dc l a s sm o d i f i c a t i o n a p a r tf r o mt h e s e ,t h i st h e s i s g i v e st h ed y n a m i ca s p e c tw e a v i n gp r o c e s so f d a w e a v e r 删l y i no r d e rt oi m p r o v et h es o f t w a r ed e v e l o p m e n te f f i c i e n c y e s t a b l i s h e d0 1 1d a w e a v e r , h a n d l et h ed i s a d v a n t a g e so fw r i t i n ga s p e c t c o n f i g u r a t i o nf i l e sb yh a n d ,t h i st h e s i so f f e r sav i s u a la s p e c td e p l o y m e n t a n de x e c u t i o ne n v i r o n m e n t ,a n dg i v e sas a m p l et ot e s ti t a tl a s t ,t h i st h e s i st a k e sj b o s sa o p a st h eb e n c h m a r kt om e a s u r e m e n t t h ew e a v i n ge f f i c i e n c yo fd a w e a v e r i ta n a l y z e st h ee x e c u t i o ne f f i c i e n c y o fm et a r g e ts y s t e mw e a v e db yt h et w oa o ps y s t e m s ,a n dg i v e s 龇龇 e x p l a n a t i o n sa c c o r d i n g t ot h er e s u l t s m e a n w h i l e ,i tm a k e sas u m m a r yo f t h er e s e a r c h ,a n dp r o v i d e st h ef u r t h e rr e s e a r c h k e yw o r d sd y n a m i ca s p e c tw e a v i n g ,w e a v i n gs t r a t e g y , a s p e c t u a l c o m p o n e n t ,b c e l ,a s p e c t c o n t a i n e r 1 1 1 原创性声明 本人声明,所呈交的学位论文是本人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除了论文中特别加以标注和致谢 的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不 包含为获得中南大学或其他单位的学位或证书而使用过的材料。与我 共同工作的同志对本研究所作的贡献均已在论文中作了明确的说明。 作者签名:旦盘日期:塑年生月卫日 学位论文版权使用授权书 本人了解中南大学有关保留、使用学位论文的规定,即:学校 有权保留学位论文并根据国家或湖南省有关部门规定送交学位论文, 允许学位论文被查阅和借阅;学校可以公布学位论文的全部或部分内 容,可以采用复印、缩印或其它手段保存学位论文。同时授权中国科 学技术信息研究所将本学位论文收录到中国学位论文全文数据库, 并通过网络向社会公众提供信息服务。 作者签名:星选导师签名三垒菱日期:丑年三月丝日 硕士学位论文 第一章绪论 第一章绪论 软件开发过程是一个不断分离、模块化关注点的过程。软件系统的关注点 分为2 种:核心关注点和横切关注点( 系统关注点) 。其中核心关注点是针对系 统的核心业务、商务逻辑、基本的业务处理逻辑,而横切关注点是指横切多个 核心模块的关注点,如:认证、持久性、日志记录等。面向对象程序设计( o b j e c t o r i e n t e dp r o g r a m m i n g , o o p ) 已能很好地实现核心关注点,但不能较好地实现横 切关注点。这是由于横切关注点横切了多个核心关注点,是多维的,而o o p 将 系统看作一些合作对象的集合,其实现方法却是一维的【1 2 1 ,即o o p 是把多维 的需求映射到一维的核心模块实现中,这样会带来2 类问题:1 ) 代码交织( c o d e t a n g l i n g ) ,使用某一个方法或类来实现多个关注点;2 ) 代码扩散( c o d e s c a t t e r i n g ) ,实现某个关注点的代码扩散到实现其他关注点的类中。 代码交织和扩散破坏了模块的封装,为开发人员带来了诸多麻烦。要解决 这个问题,需要分离关注点。关注点分离是软件工程中的一个基本原则,它是 指鉴别、封装、处理软件当中与特定概念或目标相关部分的能力。通过分离核 心和横切关注点,开发人员可以相对独立地开发软件模块,降低系统模块间的 耦合度,提高模块的内聚性,使得模块的可重用性、稳定性、易理解性、系统 架构的可演化性等都有很大的改善。目前有多种分离关注点的技术,包括面向 方面程序设计( a s p e c to r i e n t e dp r o g r a m m i n g ,a o p ) 3 1 基于容器平台( c o n t a i n e r b a s e dp l a t f o r m s ,c b p ) 4 1 、模型驱动工程( m o d e ld r i v e ne n g i n e e r i n g ,m d e ) 5 1 、元 对象协议( m e t a - o b j e c tp r o t o c o l s , m o p ) 6 , 7 1 、自适应程序设计( a d a p t i v e p r o g r a m m i n g ,a p ) 【8 】等。 a o p 分离关注点技术的核心思想是引入模块化的横切关注点方面 ( a s p e c t ) ,在编译时、加载时或运行时静态或动态地将方面织入系统。a o p 是 目前软件工程研究与应用的热点,是分离关注点可行途径之一。 1 1 研究背景与现状 多年来的理论研究表明,要构造一个灵活、可扩展的软件系统,最有效的 方式是识别并分离软件系统的关注点。这就是通常所说的“分离关注点一 ( s e p a r a t i o no f c o n c e r n s ,s o c ) 9 1 。1 9 7 2 年,d a v i dp a r n a s 提出分离关注点的最佳 途径是模块化。o o p 能够较好地模块化核心关注点,然而难以找到一种有效的 方式模块化横切关注点。a o p 是其中一种模块化横切关注点的实现方式。 a o p 思想始于19 9 0 年,来自x e r o xp a l oa l t or e s e a r c hl a b ( p a r c ) 的研究人 硕士学位论文第一章绪论 员分析了面向对象思想的局限性。他们提出了一种新的编程思想,他们认为借 助这一思想或许可以减少代码重复模块,从而帮助开发人员提高工作效率。随 着研究的逐渐深入,a o p 逐渐发展成一套完整的程序设计思想,各种应用a o p 的技术应运而生。 1 1 1a o p 的基本要素 下面以a s p c c t j 为语言基础,介绍a o p 中的基本要素。 1 ) 连接点( j o i n tp o i n t ) 。连接点是a s p c c o 中最基本的概念,它是系统中任 意良好定义了的可识别的执行点。方法调用、执行、域存取、对象的构造、异 常处理等都是软件系统的连接点。在a s p e c o 中,连接点是面向方面软件开发 过程中待插入横切行为的区域,连接点模型是具体化编织规则的基础。 2 ) 切入点( p o i n tc u t ) 。切入点捕获或识别程序执行流中的连接点。切入点本 质上是为开发人员提供的捕获连接点的结构。一旦捕获到连接点,开发人员便 可以将编织规则具体化到连接点中,如:在连接点执行之前、之中或之后添加 附加行为。除匹配连接点外,某些切入点能够挖掘所匹配连接点的上下文信息, 因此,附加行为可利用这些信息实现更灵活的横切功能需求。 3 ) 通知( a d v i c e ) 。通知是切入点的执行代码,是完成横切关注点的执行和 决定部分,是方面的执行逻辑。通知是一个类似于方法的结构,它提供在切入 点所捕获的连接点上表达横切行为的方式。a s p e c t j 有3 类通知:b e f o r e 通知、 a 陆通知和觚u n d 通知。 4 ) 导言( i n t r o d u c t i o n ) 。导言是一种向已有类增加方法或域的途径。在面向 方面软件开发过程中,除采用通知影响程序动态行为外,还需要以一种横切的 方式更改程序的静态结构。导言支持了这种静态横切的功能。有些a o p 工具将 导言称为m i x i n 。 5 ) 方面( a s p e c t ) 。方面是一个封装连接点、切入点和通知代码的结构,以模 块化横切关注点。a s p c c o 的方面类似j a v a 类,主要表示对象间的横向关系。 方面可以包含自己的属性和方法,以进一步支持o o p 。方面的引入使得模块化 横切关注点成为可能。同时,开发人员可通过定义抽象方面以及方面的继承构 建可重用方面,甚至方面构件等,提高方面的可重用性【1 0 1 。 1 1 2a o p 的优点 相比o o p 而言,a o p 最大的优点是能够通过方面封装横切关注点,从而最 大程度地实现了关注点分离。具体而言,它具有以下优点: 1 ) 代码集中并易于理解。解决了由于o o p 横跨其他关注点所带来的代码交 织和代码扩散问题。 2 硕士学位论文 第一章绪论 2 ) 模块化横切关注点。a o p 以最小的耦合处理软件系统的关注点,实现了 核心关注点和横切关注点的模块化。以这种方式实现的系统,代码冗余小,可 维护性强。 3 ) 目标系统易于扩展。由于方面模块独立于核心模块,因此很容易通过建 立新的方面为目标系统加入新的功能。同时,由于方面能够自动横切核心模块, 这种方式可以更好地处理变更需求。 4 ) 代码重用性更好。a o p 的每个方面是独立的模块,模块之间是松散耦合 的。相同方面模块可应用到不同软件系统中,具备较好的可重用性。此外,由 于核心模块在代码级别可以不再关联横切关注点,提高了核心模块的可重用性。 1 1 3 几种主流a o p 系统 a o p 最先在j a v a 平台得到应用。值得注意的是在p a r c 对面向方面编程进 行研究的同时,美国n o r t h e a s t e r nu n i v e r s i t y 的博士生c f i s t i n al o l l s 及其同事也 开始了类似的思考。最终,美国国防先进技术研究计划署( d e f e n s ea d v a n c e d r e s e a r c hp r o j e c t sa g e n c y , d a r p a ) 对这项工作给予重视,并提供科研经费,鼓 励将两者的工作成果结合起来。他们通过定义一套j a v a 语言的扩展系统,开发 人员可以方便地进行面向方面软件开发,这套扩展系统就是a s p e c t j 。a s p e c t j 在2 0 0 2 年转让给e c l i p s ef o u n d a t i o n ,从而成为在开源社区中a o p 的先锋,也 是目前最流行的a o p 工具。目前有许多基于j a v a 的a o p 系统,其中较为成熟 的主要有a s p e c t j u , 1 2 】、a s p e c t w e r k z 1 3 。1 5 1 、s p r i n ga o p 1 6 1 、j b o s sa o p 1 7 - 2 0 、 j a c ( j a v aa s p e c tc o m p o n e n t , j a c ) 2 1 , 2 2 、p r o s e ( p r o g r a m m a b l ee x t e n s i o no f s e v i c e s ,p r o s e ) 盼矧等。分别介绍如下: a s p e c t j 由x e r o xp a r c 的a o p 小组于2 0 0 1 年发布。a s p e c t j 是一个a o p 框架,它通过引入连接点、切入点、导言、通知、方面等a o p 元素扩展了j a v a 语言,并定义了一套a o p 语法,采用一种专门的编译器生成遵守j a v a 字节代 码编码规范的c l a s s 文件。 a s p c c t w c r k z 于2 0 0 2 年发布,由b e as y s t e m s 支持,是一个动态的,轻量 级高性能a o p 框架。a s p c c t w e r k z 通过在编译时、加载时或运行时修改字节代 码编织目标类文件。它通过使用标准m ( j a v av m u a lm a c h i n e ,m ) 层次的 a p i ( a p p l i c a t i o np r o g r a m m i n gi n t e r f a c e ,a p i ) 加入钩子函数。不同于a s p e c t j , a s p e c t w e r k z 没有扩展j a v a 语言,它是一种纯j a v a 框架,其通知、导言和方面 都通过普通j a v a 书写,因此它支持简单j a v a 对象p o j o ( p l a i no l dj a v ao b j e c t , p o j o ) 。由于a s p e c t w e r k z 具备动态修改类文件的特性,方面可以在运行时动 态部署。a s p e c t w e r k z 目前已和a s p e c t j 达成一致协议,共同开发一套统一的 a o p 平台。 3 硕士学位论文第一章绪论 s p r i n g 是2 0 0 3 年2 月开始的一个开源项目,该项目的基本框架来自r o d j o h n s o n 的 e x p e r to n e - o n - o n ej 2 e ed e s i g na n dd e v e l o p m e n t ) ) 书中,s p r i n g 大 量运用了控制反转( i n v e r s i o no fc o n t r o l ,i o c ) 和依赖注入( d e p e n d e n c yi n j e c t i o n , d i ) 思想,以构造一个灵活、易管理、可配置的软件系统。s p r i n ga o p 用通过 动态代理或c g l i b ( c o d eg e n e r a t i o nl i b r a r y , c g l i b ) 2 s a 6 运行时字节代码生成实 现。s p r i n ga o p 不需要专门的编译过程,不需要控制类装载器层次,因此它适 用于j 2 e ew r e b 容器或应用服务器。s p r i n ga o p 目前仅支持方法调用的连接点, 虽然可以在不影响s p r i n ga o p 核心a p i 的情况下支持成员变量拦截器,但 s p r i n g a o p 并未实现成员变量拦截器。 j b o s s 最初于1 9 9 9 年以一个开源e j b 容器项目开始,其2 x 版本是一个完 全基于j 2 e e 标准的应用服务器,3 x 系列以后是产品化系列。j b o s s 是为j 2 e e 开发人员构建应用程序的一个功能完善的架构,基于j m x ( j a v am a n a g e m e n t e x t e n s i o n s ,j m ) 口7 】内核以及面向服务架构s o a ( s e r v i c eo r i e n t e da r c h i t e c t u r e , s o a ) 郾j 。j b o s s 4 0a o p 框架是j b o s s 容器通过拦截器提供方法调用拦截并插入 方面行为的抽象架构。它允许开发人员快速而简单地应用诸如事务处理、持久 性、缓冲复制服务,而无需创建e j b ( e n t e r p r i s ej a v a b e a n , e j b ) 。开发人员只需 简单地编写或重用p o j o 、类或动态代理,进而将这些p o j o 应用到上层服务。 j b o s s 4 0 提供方面管理控制台,允许用户查看a o p 框架所加载的类及其拦截器 链、导言、切入点和相关元数据。 j a c 最初来自于r e n a u dp a w l a k 的博士论文,目前已成为a o p s y s 开发的 一个开源项目,作为了方面化中间件层的一部分。j a c 是一种应用服务器,其 特殊之处在于j a c 将复杂的e j b 组件由p o j o 代替,通过方面组件模块化横切 关注点。j a c 包含统一模型语言u m l ( u i l i f i e dm o d e l i n gl a n g u a g e ,u m l ) d e ( i n t e g r a t e dd e v e l o p m e n te n v i r o n m e n t , i d e ) ,该u m li d e 模块化商业逻辑, 自动生成、编译业务逻辑类。这些业务逻辑类在j a c 容器中执行,可以添加诸 如数据持久性、认证、配置文件管理、访问权限检测、演示、以及负载平衡等 横切关注点。 p r o s e 是一种动态编织工具,允许开发人员在运行时修改j a v a 应用程序, 插入或移除方面。在p r o s e 中,方面是普通的j a v a 对象,方面可以从本机获 取,也可以通过网络下载。p r o s e 利用j v m 的调试平台j p d a ( j a v ap l a t f o r mf o r d e b u g g e ra r c h i t e c t u r e ,j p d a ) 拦截方法调用,扩展了j v m ,这种扩展对应用程 序而言是透明的。 1 1 4 方面编织技术研究现状 a o p 的核心思想是引入模块化的系统关注点方面。通过方面,a o p 可 4 硕士学位论文 第一章绪论 以很好地封装横切关注点逻辑,使得软件模块化程度更强,可重用性更高,更 加适应软件系统需求。开发人员可以由此分为核心关注点开发和横切关注点开 发两类,而核心关注点开发并不需要关联横切关注点,这些耦合工作实际上己 由o o p 中的人工关联上升到a o p 方面编织器中自动完成。它负责在编译时、 加载时或运行时自动关联横切关注点和核心关注点,从而实现软件系统的整体 功能。 可见,方面编织是a o p 的核心支撑技术,其方面编织策略决定了a o p 系 统所支持的方面编织类型、方面的复用程度、软件的执行效率等。方面编织策 略可分为方面实现策略和方面织入时间策略。方面实现策略是指如何实现方面 的行为,而方面织入时间策略是指方面行为何时被织入目标系统中。方面编织 类型可分为静态编织和动态编织两种。静态编织是指通过编译时在连接点插入 方面代码以修改源文件实现方面织入的编织方式。静态编织方式下方面内嵌 ( i n l i n e ) 于源代码中,具有较高的执行效率。其缺陷是方面一旦织入就不能修改, 缺乏对方面的热部署能力。动态编织是指一种允许在程序运行过程中动态部署 方面的编织方式。动态编织方式下方面可以由开发人员动态加载、卸载及重组 2 9 1 o 国内对面向方面的软件开发及其实现机制的研究工作方兴未艾。代表性工 作是北京大学梅宏教授进行的中间件及软件体系结构相关研究以及曹东刚学者 主持的国家自然科学基金“构件化软件中关注点分离技术及支撑机制研究一等 工作,具体见参考文献 3 0 3 5 。上述研究动向表明面向方面的相关研究工作在 国内正在成为软件工程领域的研究热点。 1 2 研究意义 基于构件的软件工程c b s e ( c o m p o n e n tb a s e ds o f h a r ee n g i n e e r i n g ,c b s e ) 逐渐成为软件开发的主流模式,是软件开发工程化的可行途径 3 6 , 3 7 1 。在大型软 件开发过程中,常常会遇到横切关注点跨越多个模块的问题。当前的开发技术 倾向于使用一维的方法学来处理这种需求,把对应需求的实现强行限制在一维 的空间里。这个一维空间就是核心模块级的实现,其他需求的实现被迫嵌入在 这个占统治地位的空间中。换言之,需求空间是一个n 维空间,而实现空间是 一个一维空间,这种不匹配导致了很多众所周知的难题【啦】。其中关注点横切就 是其中的一个问题。基于构件开发导致的软件实现也不可避免的遇到这样的困 难。 面向方面技术通过分离横切到构件块( b u i l d i n gb l o c k s ) 中的方面来控制关 注点的纠缠,有效地分离关注点。良好的关注点分离能够简化构件的组装【2 】, 同时,基于构件的开发能够以不同方式联接和组装可重用的构件块支持软件的 s 硕士学位论文第一章绪论 开发【3 1 1 。我们将两者优点结合起来,可以创建出方面化的构件模型【3 引,同时利 用方面编织技术来简化方面化构件的组装。 方面化构件组装需要将横切关注点织入业务构件,其组装实现依赖于方面 编织。同时,按需计算中间件平台要求按照用户或数据传输的需要,动态组合、 编织计算模块,提高i n t e r n e t 服务的自动化程度,这些要求的实现也依赖于方面 编织技术。目前有许多成熟的a o p 系统,如:a s p e c t j 、a s p e c t w e r k z 、j b o s sa o p 、 j a c 、p r o s e 等,这些a o p 系统具有不同应用背景,难以适应上述研究需求。 因此,需要一种满足方面化构件组装平台以及按需计算中间件平台需求的方面 编织器。 面向方面软件开发的核心支撑技术是方面编织:在编织层自动关联核心关 注点和横切关注点,实现系统功能,从而提高软件的开发效率以及重用性。目 前,国内对方面编织技术的研究工作尚处于起步阶段,研究编织技术对国内外 面向方面软件开发理论和实践都具有重大的指导和借鉴意义。动态方面编织模 型的研究是面向方面软件开发、方面化构件组装和方面动态部署等技术的基础 性研究。本研究将为基于面向方面的软件开发提供有效的开发方法、支持工具 1 3 9 、实现机制和软件工程实践。研究成果可以直接应用到方面化构件组装平台 以及按需计算中间件平台中。 1 3 研究内容和论文组织 1 3 1 研究的主要内容 本研究的主要内容主要包括以下3 个部分: 1 ) 研究面向方面软件开发的方面编织机制,包括方面编织的策略和实现技 术。 2 ) 选择适合方面化构件组装平台以及按需计算中间件平台的方面编织策略 及技术,提出动态方面编织模型。 3 ) 开发与编织模型相应的编织工具,为方面化构件组装平台以及按需计算 中间件平台提供核心支撑环境。 1 3 2 论文组织结构 本文共分六章,主要介绍了方面编织策略、动态方面编织模型的提出、编 织工具的设计及其应用示例和性能分析。每章内容如下: 第一章介绍了课题背景以及当前相关领域的研究现状,介绍了研究意义、 研究内容和论文的组织结构。 第二章是对方面编织策略研究的综述。分析了各编织策略的优缺点,介绍 6 硕士学位论文 第一章绪论 了目前6 种主流a o p 系统的编织机制。 第三章和第四章是本文的重点。分别提出了动态方面编织模型以及编织工 具的实现机制。 第三章分析了方面编织需解决的问题,针对方面化构件组装平台以及按需 计算中间件平台的需求,提出了一种基于类修改和反射的动态方面编织模型 d a w e a v c r ( d y n a m i ca s p e c tw e a v c t , d a w e a v e r ) 。在此基础上,提出d a w e a v e r 的切入点模型、通知模型和方面模型,并给出了基于d a w e a v e r 的方面化构件 组装模型。 第四章详细阐述了实现d a w e a v e r 的关键技术,包括方面容器实现机制, 类文件修改机制及其关键算法。同时,针对方面容器的实现方式给出了b e f o r e 、 a _ t i e r 、觚u n d 三种通知的编织过程,说明了d a w e a v e r 的动态方面编织机制。 第五章介绍了d a w e a v e r 系统示例以及d a w e a v e r 的编织性能。以j b o s s a o p 为基准,比较了由d a w e a v e r 和b o s sa o p 编织的目标系统的执行效率。 第六章总结全文,提出了进一步的研究计划和设想。 1 4 本章小节 本章首先介绍了软件工程中分离关注点的主要方式,然后介绍了a o p 思想 和当前几种主流a o p 系统,介绍了方面化构件组装的优势以及方面编织的类 型,讨论了国内外在方面编织领域的研究现状,说明了本课题的研究意义。最 后,介绍了论文的组织和安排。 7 硕士学位论文第二章方面编织策略研究进展 第二章方面编织策略研究进展 方面化构件组装平台以及按需计算中间件平台需要方面编织技术的支持, 研究目前方面编织实现的不同策略、分析当前主流a o p 系统的编织机制及其特 点,有助于方面编织器的开发,对于寻找适合上述平台需求的方面编织技术具有 重要的指导和借鉴意义。本章将阐述方面编织策略的研究进展、分析各种a o p 系统的编织机制。 2 1 方面编织策略 方面的编织策略决定a o p 开发平台的性能和特征,是a o p 开发平台的核 心支撑技术。方面编织策略可分为方面实现策略和方面织入时间策略。方面实 现策略是指如何实现方面的行为,而方面织入时间策略是指方面行为何时被织 入目标系统中。 2 1 1 方面实现策略 实现方面的织入和运行,关键是实现对通知调用的插入。程序流执行到某 个连接点时,编织系统应识别这个连接点,并在该连接点插入相应的横切行为。 目前有许多策略实现这一插入,共分为4 种:类包裹器、类替代、类修改以及 解释器修改 4 0 , 4 1 1 。这4 种实现策略阐述如下: 1 ) 类包裹器( c l a s sw r a p p e r ) :类包裹器实现的思想是在客户端( 调用类) 和服 务端( 被调用类) 之间插入一个中间类。类包裹器策略的实现方式有代理模式 ( p r o x y ) 和继承( i n h e r i t a n c e ) 。 自j a v a l 3 开始,s u n 公司提供了j a v a 1 a n g r e f l e c t p r o x y 类【4 2 】,从而代理模 式得到了长足地发展。调用类在执行被调用类相关行为时,由代理类捕获该行 为,从而可以在执行该行为之前添加附加行为,如增加日志功能、权限认证功 能等,图2 1 是动态代理模式实现类包裹的示意图。然而,代理模式存在一些 限制:一个代理只能与一个接口关联,调用类必须明确代理类的存在,增强了 调用类与代理类的耦合程度,同时由于代理采用了动态方法调用方式,其执行 效率很低。 图2 - 1 动态代理模式实现类包裹 8 硕士学位论文 第二章方面编织策略研究进展 类包裹器的另一种实现方式是继承。如图2 - 2 所示,该方式下,首先需要重 命名原始被调用类,进而生成新的与原始被调用类同名的新类,并继承该原始 被调用类。因此,可以在新生成的被调用类之中添加附加行为,实现方面功能, 而对于调用类而言,这些附加行为是透明的。当然,这种以重命名和继承方式 实现的包裹器对于已构建好的应用系统而言,技术难度比较大,增加了应用系 统的代码量。 图2 - 2 继承方式的包裹器 类包裹器策略存在2 个问题:自身包裹问题,反包裹( 超类被修改时) 和封 装问题。由于该策略对已有应用系统的影响过大,类包裹策略不适合将已有应 用系统进行a o p 重构。 2 ) 类替代( c l a s ss u b s t i t u t i o n ) :原始类被新类所代替,无需在调用类中添加 特殊代码。图2 3 是该策略的示意图。与类包裹器相比,类替代与原始被调用 类无直接关联。新的类不会继承原始被调用类,也不会引用原始被调用类。 目 图2 - 3 类替代策略示意图 类替代的实现方式有多种:改变类路径或创建自定义类加载器。改变类路 径方式是指修改类路径环境变量,使之首先加载已替代的新类;自定义类加载 器方式下,可以以自定义方式加载类。类替代方式下,附加行为由新类完成, 前提是新类需要实现原始被调用类的所有方法。因而这种方式应用较少。 3 ) 类修改( c l a s sm o d i f i c a t i o n ) :类修改直接修改被调用类。在代码生命周期 的不同阶段通过修改源代码或字节代码实现类修改,如图2 _ 4 所示。 图2 - 4 类修改策略示意图 与上述几种方式相比,类修改不需要添加额外的类,也无需采用动态方法 调用,具有较高的执行效率,已成为a o p 方面实现的主流技术,如a s p e c t j 、 9 硕士学位论文第二章方面编织策略研究进展 a s p e c t w e r k z 等。目前主流的a o p 系统大多采用类修改方式,只是修改类的方 式和时间有所差异而已。如a a s p c c t j 在编译后端修改类文件,而a s p e c t w e r k z 可以在编译时、加载时或运行时修改类文件。类修改方式具有较高的执行效率, 同时为方面的动态部署提供了便利,较好地支持了方面的动态装载和卸载。 4 ) 解释器修改( i n t e r p r e t e rm o d i f i c a t i o n ) :这种策略不需要修改应用程序而只 需修改解释器。如利用j v m d i ( j a v av i r t u a lm a c h i n ed e b u g g e ri n t e r f a c e ,j v m d i ) 实现方面编织团】。程序执行到某一断点时,j v m d i 通知调试器,这时可在此断 点上插入附加行为。这种方式的缺点是程序必须在调试模式下运行。解释器修 改的另一种实现方式是修改j v m 使之具备插入方法调用的能力例。这种方式也 会产生一些问题:由于要创建特殊的j v m ,这种策略与标准j v m 规格说明的 演化相关联,应用程序只能限制在特定j v m 之内。 2 1 2 方面织入时间策略 方面织入时间策略分为3 类:编译时编织、加载时编织和运行时编织,这3 类策略阐述如下: 1 ) 编译时编织( c o m p i l e v a n ew e a v i n g ) :编译时编织策略可分为编译前策略 和编译后策略。编译前策略通过修改源代码实现方面织入,它需要获得应用程 序的源代码。编译后策略则是在字节代码级别上对类文件( c l a s s 文件) 进行修 改。目前有许多j a v a 类库提供对字节代码的操作,如:a s m 4 3 1 ,j o i e ( j a v ao b j e c t i n s t n a n e n t a t i o ne n v i r o n m e n t , j o i e ) 1 4 4 ,b c e l ( b y t e c o d ee n g i n e e r i n gl i b r a r y , b c e l ) 【4 5 删和j a v a s s i s t ( j a v ap r o g r a m m i n ga s s i s t ,j a v a s s i s t ) 4 7 1 等。编译时织入策 略具有较高的执行效率,前提是牺牲较多的编译时间。 2 ) 加载时编织( l o a d - v a n ew e a v i n g ) :这种方式无须修改任何文件,而是当 类进行加载时在字节流层次上对方法调用进行修改以插入横切行为。由于j a v a 程序的执行需要通过类加载器,包括基类加载器、系统类加载器以及应用程序 自定义类加载器加载运行过程中所使用的类。因此,可以在类进行加载时添加 个额外层,以拦截并分析所加载的类,从而可以修改需要插入方面的类,实现 方面的织入。实现这种策略的一种方法是创建一个自定义类加载器,其主要作 用是修改字节流而不是类文件,从而无需修改目标系统的类文件,如图2 5 所 示。 1 0 硕士学位论文 第二章方面编织策略研究进展 三三 :】i i i i l l l l i 亘- e a v e r 匝重亘s 图2 - 5 创建自定义类加载器加载时编织 图2 5 是采用自定义类加载器的加载时编织模型。自定义类加载器完成对目 标系统类文件的解析,查找并匹配切入点,进而依据目标系统所提供的方面程 序修改字节代码。这种方式会产生2 个问题:1 ) 每次运行目标系统时需修改字 节代码,其执行效率较低;2 ) 加入了自定义类加载器,如果目标系统存在自定 义的类加载器,编织器则不能编织这种类型的目标系统,限制了编织器的应用 范围。这是由于j a v a 类加载的委托机制决定的 4 8 1 。为克服自定义类加载器引起 的缺陷,有关研究人员已提出在基类加载器部分进行方面编织,如b c a ( b i n a r y c o m p o n e n ta d a p t i o n , b c a ) 【4 9 】,也有部分研究工作集中在修改系统类加载器, 使得方面编织在系统类加载器部分完成,如j m a n g l e r t 5 0 1 。加载时编织的另一种 方式是修改类路径,使j v m 能够最先加载到新的类。这种方法需要实现原始类 所有方法的替代类。 加载时编织具有较好的动态性,在本质上支持方面的动态模型,提供方面 热部署的可行性环境。同时,由于加载时编织具有一定的执行效率优势,这种 编织方式已逐渐成为a o p 平台的主流编织方式。 3 ) 运行时编织( r u n - t u n ew e a v i n g ) :对于运行时编织,类已经被加载至 j v m 。为实现横切行为,可采用的技术有:元对象协议、解释器修改、反射和 动态代理、耵t ( j u s ti nt u n e ,j i t ) 技术等。 基于动态代理的方面编织无需代码转换过程,同时可以利用配置文件定义 横切关注点织入逻辑,实现轻量级a o p 框架,如s p r i n ga o p ,n a n n i n g 岭。基 于动态代理的方面编织的缺陷是方面织入粒度不够细,主要集中在方法调用级, 程序执行效率较低。 基于j r r 技术的方面编织是指在m 编译器层次上的编织方式。和大多数方 面编织策略一样,它同样需要修改代码,不同的是这种修改是在j r r 编译器将 字节代码编译为本地代码过程中实现。因此,这种方式需要改造j i t 编译器使 其具备方面织入的附加功能,实现的技术难度较大。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《黑神话:悟空》2025高中地理练习题含答案
- 餐饮战略合作协议书合同模板
- 采购管材管件合同范文
- 保证合同协议书范本
- 智慧养老方案课件
- 山东省烟台市蓬莱区(五四制)2024-2025学年八年级上学期期中考试英语试卷(含解析)
- 河北省邯郸市临漳县2024-2025学年七年级上学期11月期中生物学试卷(含答案)
- 《纺织纤维鉴别试验方法 第3部分:显微镜法》
- 高原常见病防治课件
- 肺部解剖及肺循环相关病变课件
- 第五讲新闻评论的结构与节奏
- 护士长竞聘演讲ppt
- 从PK-PD看抗菌药物的合理应用
- 加热炉施工方案
- 进入重庆市特种设备信息化管理平台
- 意象对话放松引导词2[生活经验]
- 高速公路安全生产标准化指南1
- 学科融合课题研究实施方案
- 生物质压块机使用说明书
- 非织造布学——针刺讲解
- 临床药理学个体化药物治疗与精准医学
评论
0/150
提交评论