(计算机应用技术专业论文)基于car的动态织入aop技术.pdf_第1页
(计算机应用技术专业论文)基于car的动态织入aop技术.pdf_第2页
(计算机应用技术专业论文)基于car的动态织入aop技术.pdf_第3页
(计算机应用技术专业论文)基于car的动态织入aop技术.pdf_第4页
(计算机应用技术专业论文)基于car的动态织入aop技术.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文摘要 在复杂的应用系统中,往往存在一组互不关联的对象模块之间有一些共同行 为动作需要处理,这些共同的行为动作可被称为“横切关注点( c r o s s c u t t i n g c o n c c r l i s ) ”,其特点是它们都跨越系统的多个核心功能模块,例如日志记录、事 务管理、性能优化、错误处理、以及设计模式等。因为这些关注的实现必须穿 插在问题领域的代码中去,使得这类关注点的实现要么散乱( s c a t t e r i n g ,一个关注 点的实现在代码中到处分散) 要么杂糅o a n g n n g , - - 个软件模块描述对多个关注点 的实现1 。而这些横切关注点无论是采用面向过程的还是面向对象的编程方式 ( o o p ) ,都难以用清晰的、模块化的代码实现。 面向切面编程( a o p ) 能够自动地将这些横切关注点织入到面向对象的软 件系统中,从而实现了横切关注点的模块化。切面是a o p 的核心,就是把对一个 可能横切不同的多个对象的关注点模块化,这些模块化单元就叫“切面”。a o p 在帮助我们解决代码散乱和杂糅问题的同时,还有其它一些好处:( 1 ) 系统容 易扩展。由于切面可以让程序员接触到多个函数的多个接触面,所以在原来的 基础上很容易通过加入新的切面来扩展原有的功能。( 2 ) 升级容易。使用a o p , 设 计师可以推迟为将来的需求作决定,实现当前的紧要需求,而把日后更新的需 求使用切面与以前的需求耦合起来。( 3 ) 更好的代码复用。新的编程技术的最 终目的都是为了代码复用,a o p 把每个切面实现为独立模块,模块之间的耦合 是松散的,更容易理解和维护,代码的冗余也更小,更容易复用。 当然,在对象之间横向联系不很频繁的场合,a o p 并不一定比0 0 p 更有优势, 甚至有时使用a o p 反而不如0 0 p 自然,所以a o p 只是0 0 p 在某些应用场合的补充 而已。可以说a o p 是在实现软件模块之间的松散耦合,从而提高软件的可维护性 和可复用性等方面的对0 0 p 的进一步改进。 和欣操作系统中的c a r ( c o m p o n e n ta s s e m b l yr u n t i m e ) 构件主要由其所定义 的接口、构件类和相关元数据组成。基于c a r 的a o p 机制使用户能够在完全 不用修改源代码的情况下简单而方便的动态聚合两个或多个c a r 构件类,从而 生成一个具有两个或多个c a r 构件类所有接口实现的新构件类。实现了动态织 入切面代码的a o p 技术。 关键字:c a r 、构件、a o p 、关注点、元数据、切面、聚合 a b s t r a c t i nc o m p l i c a t e da p p l i c a t i o ns y s t e m , t h e r ea r es o m ec o m m o nb e h a v i o r sa m o n g m a n yu n r e l a t e dp m g r n mm o d u l e s ,i t st h es oc a l l e d “c r o s s c u t t i n gc o n c e r n s ”t h e f e a t u r eo ft h e s ec r o s s c u t t i n gc o n c e r n s ( s u c ha s l o g 、t r a n s a c t i o n a lm a n a g e m e n t ,、 p e r f o r m a n c eo p t i m i z a t i o n 、e x c e p t i o nh a n d l i n ga n dd e s i g nm o d e , e t c ) i st h a tt h e ya l l s c a t t e r e di nm a n yo ft h es y s t e m sc o r ef u n c t i o n a lm o d u l e s b e c a u s et h e s ec o n c e r n s i m p l e m e n t a t i o nh a v et ob ei n t e r w e a v e di nd i f f e r e n tm a t t e rf i e l d sc o d e ,i tl e a dt ot h e r e s u l tt h a tt h e i r i m p l e m e n ta r ee i t h e rs c a u e r i n g ( o n ec o n c 脚 l l s i m p l e m e n t a t i o n s c a t t e r e di nm a n yp l a c eo fs y s t e m ) o rt a n g l i n g ( o n ep r o g r a mm o d u l ed e s c r i b e st h e i m p l e m e n t a t i o no fm o r et h a no n ec o n c e r f l s ) a n di t sh a r dt 0i m p l e m e n tt h e s e c r o s s c u t t i n gc o n c e r n sw i t hc l e a r 、m o d u l a r i z e dc o d ee i t h e ri np o po ro o p a s p e c t - o r i e n t e d - p r o g r a m m i n g ( a o p ) m o d e l c a na u t o m a t i c a l l yw e a v et h e s e c r o s s c u t t i n gc o n c e r n si n t ot h eo b j e c t - o r i a n t e ds o f t w a r es y s t e m , a n di m p l e m e n tt h e m o d u l i z a t i o no fc r o s s c u t t i n gc o n c e r n s a s p e c ti st h ec o r eo fa o f , i tm e a n st o m o d u l a r i z eac o n c e r nt h a tm a yc r o s s c u ti nm a n yp r o g r a mm o d u l e s ,t h e s em o d u l a r i z e d c o n c e r n sc a l l s “a s p e c t ”b e s i d e sh e l p i n gu sr e s o l v et h ep r o b l e m so fc o d es c a t t e r i n g a n dt a n g l i n g , a o pa l s ob r i n g s 惦m a n yo t h e rg o o d s :( 1 ) e a s i e rs y s t e me x t e n d i n g b e c a u s ea s p e c tc a nl e tp r o g r a m m e rg e tt om u l t i i n t e r f a c eo fm a n yf u n c t i o n s , s oi t s e a s yf o ru st oa d dn e wa s p e c ti no r d e rt oe x t e n d i n gt h ef o r m e rf u n c t i o n ( 2 ) e a s i e r u p g r a d e u s i n ga o p , d e s i g n e rc 柚p o s t p o n et h e i rd e c s o nf o r t h ef u t u r er e q u i r e m e n t s ; j u s ti m p l e m e n tt h eu r g e n tn e e d s ,a n du s i n ga s p e c tt oc o u p l i n gt h en e wn e e d sw i t ht h e p r e v i o u sn e e d sw h e nn e e d e di nt h ef u t u r e ( 3 ) b e t t e rc o d er e u s e t h eu l t i m a t ea i mo f e v e r yn e wp r o g r a m m i n gt e c h n o l o g yi sa l lt h es a m e :c o d er e u s e a o pi m p l e m e n t e d e v e r ya s p e c ta sa ni n d e p e n d e n tm o d u l e ,e v e r ym o d u l ei sl o o s ec o u p l e d ,i t sm o r e u n d e r s t a n d a b l ea n de a s yt om a i n t a i n , i ta l s oh a sl e s sc o d er e d u n d a n c y , a n dm o r e r e n s a b l e b u ta o pi sn o ta l w a y ss u p e r i o rt oo o p , e s p e c i a l l yi ns o m eo c c a s i o n st h a tt h e r e a r ef e wc r o s s c u t t i n gr e l a t i o n s h i p sa m o n go b j e c t s s oa o pi st h es u p p l e m e n to fo o p i ns o m ea p p l i c a t i o no c c a s i o n w ec a ns a yt h a ta o pi st h ei m p r o v e m e n to fo o p b y m e a n so fi m p l e m e n tl o o s ec o u p l i n go fp r o g r a mm o d u l e s 、e n h a n c es o f t w a r e s m a i n t a i n a b i l i t ya n dr e u s a b i l i t y e l a s t o s sc a r ( c o m p o n e n ta s s e m b l ym n t i m oc o m p o n e n tw a sc o m p o s e do f i n t e r f a c e s 、c o m p o n e n tc l a s s e sa n dr e l a t e dm e t a d a t a a o pt e c h n o l o g yb a s e d o nc a r c a nl e tu s e re a s i l ya n dc o n v e n i e n t l ya g g r e g a t i n gt w oo rm o r ec a rc o m p o n e n t s w i t h o u tm o d i f i e dt h es o u r c ec o d e 。a n db u i l dan c wc o m p o n e n tc l a s st h a th a st w oo r m o r ec a rc o m p o n e n t si n t e r f a c e s ,a n dt h e r e b yi m p l e m e n t e dt h ea o pt e c h n o l o g y w h i c hc a nd y n a m i c a l l yw e a v i n ga s p e c tc o d e k e y w o r d :c a r 、c o m p o n e n t 、a o p 、c o n c e r n 、m e t a d a t a 、a s p e c t 、a g g r e g a t i o n i l l 此页若属实请申请人及导师签名。 独创性声明 本人声明,所呈交的论文是我个人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢 的地方外,论文中不包含其他人已经发表或撰写过的研究成果, 也不包含为获得武汉理工大学或其它教育机构的学位或证书而使 用过的材料。与我一同工作的同志对本研究所做的任何贡献均已 在论文中作了明确的说明并表示了谢意 僦生繇蘸日期碰一二6 关于论文使用授权的说明 本人完全了解武汉理工大学有关保留、使用学位论文的规定, 即:学校有权保留送交论文的复印件,允许论文被查阅和借阅; 学校可以公布论文的全部内容,可以采用影印、缩印或其他复制 手段保存论文。 ( 保密的论文在解密后应遵守此规定) 研究生签名:醯导师签名麴:日期 注:请将此声明装订在学位论文的目录前。 h 口t 6 武汉理工大学硕士学位论文 1 1 为什么需要a o p 第一章a o p 综述 软件开发过程就是使用计算机语言将人们关心的现实世界的问题映射到计 算机世界进行求解的过程。软件设计的主要目标是要实现好的结构,使被开发出 来的软件具有良好的构造性和演化性,而好的代码带给程序员好处的最终体现 就是代码复用。 回溯程序设计范型的发展以及各种程序设计语言的兴起,体现了人们对抽象 程度的不断追求,通过更高层次的分解和模块化来解决日益增长的软件复杂性。 结构化程序设计提供了功能层次的抽象,o o p 提供了对象层次的抽象,然而,面向 对象技术并没有彻底解决软件开发中的维护、复用等问题。在面向对象世界里, 软件被划分为多个离散的类,每个类担任一个角色,以此来实现软件系统角色的 划分。但是类与类之间的关系通常是错综复杂的,面向对象只通过继承表达了纵 向的联系,而类与类之间横向的联系是其所忽略的,结果导致类之间的一些共同 属性散乱分布在各个类的代码中【。从角色划分角度来说,类由于承担了多个角 色而导致代码混乱,结果使得封装不严密,划分的角色也不清晰,这显然与面向对 象思想相违背: 实际上软件具有固有的复杂性,这是由一些因素决定的,包括问题域本身的复 杂性,项目管理开发过程存在困难和程序状态的复杂性等等。如何处理这种日益 增长着的复杂性一直是困扰软件开发人员的问题之一。复用带来沉重的负担。 此外,0 0 p 在大型系统、分布式系统和灵活性要求较高的系统中也存在很多局限。 而a o p 提供了关注点层次的抽象1 2 1 。0 0 p 成功地模块化了软件系统中的核心关 注点却遗漏了繁琐的横切关注点;a o p 是以模块化横切关注点为目标的新型程序 设计范型,它是对0 0 p 的演化发展和补充,是在更高的抽象层次上,充分分析了0 0 软件系统中依然存在的软件维护、复用、扩展等问题的本质后,提出的一种改 进方案。 然而软件固有的复杂性和抽象性使得软件的复用不可能像很多实物的复用 那么容易, a o p 也并没有彻底解决这方面的困难,而只是较0 0 p 的一种改进,保持 了软件需求阶段的概念与实现阶段模块之间的一一映射,从而提高了软件的可理 武汉理工大学硕士学位论文 解性、可维护性、可复用性和可扩展性【3 l 。 1 2 a o p 的本质特征 将通用需求功能从不相关的类之中分离出来;同时,能够使得很多类共享一 个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。a o p 就是这种实现分散关注的编程方法,它将“关注”封装在“切面”中f 4 l 。 关注点就是一个特殊的目标、概念或实现某种特定功能的模块,常在多个模 块中出现。一般而言,可以把关注点理解为满足用户需求、有关软件实现的多种 事项,可以说一个关注点就是软件要解决的一个问题 5 1 。 关注点可分成两大类:核心级关注点和系统级关注点,整个软件系统可以理 解为由一系列关注点组成。以a t m 自动取款系统为例,其关注点包括:密码验 证、取款、余额查询、打印、日志记录等等。核心级关注点包括取款、余额查 询、打印。而系统级关注点包括密码验证、日志记录。系统级关注点会影响多 个模块的实现,比如在取款、余额查询、打印过程中,通常会交织有密码验证、 日志记录的动作,所以也被称为横切关注点。从技术上来讲,一个复杂的软件系 统可以被看成是多个核心级和系统级关注点的组合实现1 6 】。横切关注点通常横跨 多个业务逻辑模块,与核心关注点交织在一起,正是这种混乱阻碍了软件的维护 和复用。在面向对象软件开发的需求和设计阶段,各个关注点往往还是彼此分 离的,而到了实现阶段,oo 提供的实现方式无法再保持核心关注点和横切关注 点的分离。导致了代码的交织与混乱。 a o p 能够自动地将这些横切关注点织入到面向对象的软件系统中,从而实现 了横切关注点的模块化。切面是a o p 的核心,就是把对一个可能横切不同的多个 对象的关注点模块化,这些模块化单元就叫“切面”。a o p 用最小的耦合处理每个 关注点,使得即使是横切关注点也是模块化的。这样的实现产生的系统,其代码的 冗余小。模块化的实现还使得系统容易理解和维护。 熟悉设计模式的读者都知道g o f 的2 3 个设计模式,为了提高设计模式的 可复用性,gk i c z a l e s 用a s p e c o 改造了g o f 的2 3 个设计模式,对于其中的 1 7 个模式,他们成功地借助a s p e c t 去除了各参与者之间的代码级依赖部分。 用面向a s p e c t 技术重写后,不仅解决了设计模式在应用中带来的模式框架代码 与业务代码混淆时的难理解情况,也使代码行大大缩减,并保持了大多数性能 优点。 2 武汉理工大学硕士学位论文 a o p 引入了切面的概念,切面是对横切关注点的抽象,使得可以把横切关注点 从系统逻辑中抽离出来,从而更好地模块化。同时切面会通过一定的编织策略在 编译或运行的某个阶段同业务逻辑结合在一起,形成完整的系统切。 1 3a o p 中新引入的一些概念 ( 1 ) 连接点o o i np o i n t ) :程序执行过程中的点,比如调用某个类里的特定方法的 地方。 ( 2 ) 切入点( p o i n t c u t ) :切入点捕获、识别程序流程中的连接点,一旦捕获了一 个连接点,那么就可以在这些连接点的执行之前或之后做某些动作。这些动作在 建议中指定。 ( 3 ) 通知建议( a d v i c e ) :指定到达特定切入点处应执行的代码。a s p e n 提 供了三种把建议关联到连接点的方式: b e f o r e :在j o i n tp o i n t 之前执行。 a f t e r :在j o i n tp o i n t 之后执行。 a r o u n d :代替原j o i n tp o i n t 处方法的执行。 ( 4 ) 倡导( i n t r o d u c t i o n ) :通知只是在程序运行时改变程序的行为,是动态的改 变。而倡导可以改变程序的静态结构,如类中的成员,或者类之间的关系。 ( 5 ) 切面( a s p e c t ) :类似于o o p 中的c l a s s ,是对以上几种元素的封装。它把切入 点、通知和倡导包在一起嗍。和类相似,切面也可以包含方法和属性,从其他类或 切面扩展以及实现接口等。与类不同的是,不能用n e w 来创建一个切面实例。 a o p 的实现由以下三个部分组成: ( 1 ) 组件语言( c o m p o n e n tl a n g u a g e ) :负责系统的核心关注点。组件语言就 是传统的程序设计语言,如a s p e c t j 中的组件语言就是标准j a v a 。组件语言不一定 是面向对象风格,如a s p e c t c 的组件语言就是面向过程的c 语言,但a o p 和o o p 的结合最为自然和方便,所以大多数组件语言均采用面向对象语言。 ( 2 ) 切面语言( a s p e c tl a n g u a g e ) :负责系统的横切关注点。切面语言是a o p 中专用于处理横切关注点的语言,也是a o p 对o o p 的扩展部分,它采用了面向对 象的封装思想,将横切关注点封装在a s p e c t 中。 ( 3 ) 编织器( w e a v e r ) :组件语言和切面语言的并行与合作由编织器无缝编织 实现,这样程序员可以在两个维度上对软件进行设计和实现,解决了横切关注点 3 武汉理工大学硕士学位论文 的模块化问题1 9 1 。 系统的功能由两种语言合作完成,即系统的主要功能由组件语言完成,而横切 功能由切面语言完成。 横切关注点之所以会散乱分布在软件的多个模块中,是因为这些模块都需要 横切关注点提供的功能。a o p 除了集中定义这些功能外,还必须提供一种机制让 其他模块使用这些功能,这便是编织器( w e a v e r ) 的主要工作:将a d v i c e 织入到特 定的软件关注点处。 织入器的工作原理类似于面向过程或者面向对象程序设计中的链接器 o j n k c r ) ,但又不等同于链接器。织入器连接的是两种不同的模块,它比链接器更复 杂。织入可以发生在预处理阶段,也可以发生在编译后甚至程序运行阶段。织入 器的复杂性在于它要识别切面代码中指出来的带有条件的程序切入点。在不破坏 原有程序的功能语义的前提下把通知代码织入到原有程序中去。 目前主要有两种编织器:静态织入器和动态织入器【1 0 】。 静态织入器工作在预处理( p r e - p r o c e s s i n g ) 阶段,在源程序级织入切面代码,有 时可以称其为源程序级的程序转换器( t r a n s f o r r a e r ) ,绝大多数a o p 的织入系统都 是静态织入器,比如a s p c c t j ,a s p c c t c + + 等。 动态织入器是指具有可以在二进制级或者程序运行阶段织入切面代码的能 力的织入器,比如a r a c h n e ,它可以在程序运行时动态织入可执行代码。静态织入 器通常需要已有程序的源程序才能工作;而动态织入器则没有这方面的要求,它 一般具有非常强大的对二进制程序或者程序运行环境的操纵能力;但动态织入器 的效率不及静态织入器l “】。 1 4 一个例子 假设在一个系统中,有这样一种需求:多个访问类同时访问一个共享数据对 象时,每个访问类在访问这个数据对象时,需要将数据对象上锁,访问完成后, 再实行解锁,供其它并发线程访问,这是我们处理并发访问资源的方式。 为了实现这个需求,先实现传统的编程,这里我们假定有一个写锁,对数 据对象实行写之前,首先对这个对象进行上写锁,写操作完毕后,必须释放写 锁。 首先,我们需要一个锁,这个锁可以是数据对象中一个字段或其它,这里使 用r e a d e r w r i t e r l o c k ( 读写锁) 作为我们的锁资源 4 武汉理工大学硕士学位论文 p u b l i cc l a s sw o r k e re x t e n d st h r e a d d a t ad a t a ; i r e a d e r w r i t e r l o c kr w l ; p u b l i cb o o l e a nc r e a t e d a t a 0 t r y r w l w r i t e r l o c k 0 ;| 上锁 对d a t a 实行写逻辑操作 c a t c h 0 r e t u r nf a l s e ; f i n a l l y r w l w r i t e r u n l o c ko ;角 锁 r e t u r nt r u e ; p u b l i cb o o l e a nu p d a t e d a t a 0 t i ) r r w l w r i t e r l o c k 0 ;l tb 彀 ,对d a t a 实行写逻辑操作 c a t c h 0 r e t u r nf a l s e ; f m a l l y r w l w r i t e r u n l o c ko ;解锁 r e t u r nt r u e ; ) 5 武汉理工大学硕士学位论文 p u b l i cv o i dr u n o | 渤螈c r e a t e d a t a 0 或u p d a t e d a t a 0 ) 假设可能存在另外一个访问类,也将对数据对象实现写操作,代码如下: p u b l i cc l a s sa n o t h e r w o r k e re x t e n d st h r e a d d a t a d a t a ; i r e a d e r w r i t e r l o c k r w l ; p u b l i cb o o l e a nu p d a t e d a t a 0 仃y r w l w r i t e r l o c k o ;l l 锻 肟十d a t a 实行写逻辑操作 c a t c h 0 r e t u r nf a l s e ; f i n a l l y r w l w r i t e r u n l o d a 0 :解锁 r e t u r nt r u e ; p u b f i cv o i dr u n 0 执行u p d a t e d a t a 0 ) 以上是传统编程的实现的伪代码,这种锁的实现方式是在每个具体类中实现, 如下图: 6 武汉理工大学硕士学位论文 图1 1 传统编程中的实现方法 这种实现方式的缺点很多: 冗余:有很多重复的编码,如r w l w r i t e r l o c k 0 等; 可重用性低:具体访问类因为也包含“锁”状态之类的相关代码,只能被重用 在相关有“锁”的场合,重用范围很窄。w o r k e r 的u p d a t e d a t a 0 方法重用性几乎为 零。 设计思想不易达成:“对数据对象的写操作必须使用锁控制”这个目的不容易 显现,如果其它人设计了一个访问类,他完全可能编写一段不使用锁机制就对 这个数据对象进行写操作的代码。 以下进述如何用a o p 概念来重新实现上述需求,解决上述问题。如果说上 面代码在每个类中实现上锁或解锁,类似横向解决方式,那么a o p 是从纵向切 面来解决上述问题,如下图所示: 7 武汉理工大学硕士学位论文 上镘镬 图1 2a o p 中的实现方法 a o p 把这个纵向切面c r o s s c u t s 称为a s p e c t ( 切面) , a s p e c o 的实现: 下面我们使用a o p 的实现之一a s p e c t l 来对上述需求改写。a s p e c t l 是a o p 最早成熟的j a v a 实现,它稍微扩展了一下j a v a 语言,增加了一些k e y w o r d 等, p o i n t c u t 的语法如下: p u b l i cp o i n t c u t 方法名:c a l i ( x x x x ) a s p e c t j 增加了p o i n t c u t , c a l l 是p o i n t c u t 类型。 使用a s p e c t j 如何实现上图所谓切面式的编程呢? 首先,我们将上图纵向切面 称为a s p e c t ,那么我们建立一个类似c l a s s 的a s p e c t ,j a v a 中建立一个c l a s s 代 码如下: p u b l i cc l a s sm y c l a s s j 禺性和方法 同样,建立一个a s p e c t 的代码如下: p u b l i ca s p e c tm y a s p e c t 属性和方法 ) 8 武汉理工大学硕士学位论文 在此,我们建立一个a s p e c t 名为l o c k ,代码如下: i m p o r te d u o s w e g o c s d 1 u t i l c o n c u r r e n t * ; p u b l i ca s p e c tl o c k i r e a d e r w r i t e r l o c k r w l ; p u b l i cp o i n t c u tw r i t e o p e r a t i o n s 0 : e x e c u t i o n ( p u b l i cb o o l e a nw o r k e r c r e a t e d a t a 0 ) e x e c u t i o n ( p u b l l cb o o l e a nw o r k e r u p d a t e d a t a o ) 0 e x e c u t i o n ( p u b l i cb o o l e a n a n o t h e r w o r k e r u p d a t e d a t a 0 ) ; b e f o r e 0 :w r i t e o p e r a t i o n s 0 r w l w r i t e r l o c k o ;l l 主l 彀a d v i c e b o d y a f t e r 0 :w r i t e o p e r a t i o n s 0 r w l w r i t e r u n l o c k 0 ;i 锯锬a d v i c eb o d y ) ) 上述代码关键点是p o i n t c u t ,意味切入点或触发点,在执行w o r k e r 的 c r e a t e d a t a 0 方w o r k e r 的u p d a t e d a t a 0 :y 法时会触发。c r e a t e d a t a 0 叩d a t e d a t a o 即为切入点w r i t e o p e r a t i o n s 所捕获的连接点。 b e f o r e 指明j o i np o i n t 之前所要执行的操作,即要织入的a d v i c e :上锁。 a f t e r 指明j o i np o 硫之后所要执行的操作:解锁。 通过引入上述a s p e c t ,那么w o r k e r 代码可以清洁如下: p u b l i cc l a s sw o r k e re x t e n d st h r e a d d a t ad a t a ; p u b l i cb o o l e a nc r e a t e d a t a 0 t r y 对d a t a 实行写逻辑操作 c a t c h 0 9 武汉理工大学硕士学位论文 r e t u r nf a l s e ; ) r e t u r l lt r u e ; p u b l i cb o o l e a nu p d a t e d a t a 0 h y 对d a t a 实行写逻辑操作 c a t c h o r e t u r nf a l s e ; r e u l r nt r u e ; p u b l i cv o i d 埘n o l i b 行c r e a t e d a t a 0 或u p d a t e d a t a 0 ) ) 每当要对d a t a 实行写操作时,即执行到c r e a t e d a t a o 或u p d a t e d a t a 0 方法时, 我们所定义的a s p e c tl o c k 中的切入点w r i t e o p e r a t i o n s 都会捕获到该方法( 即j o i n p o i n t ) ,并根据规则将相应的a d v i c e 织入到该段代码中,此例中将加锁操作 r w l w r i t e r l o c k 0 加到对d a t a 的写操作之前( 该a d v i c e 类型为b e f o r e ) , 将解锁操作 r w l w r i t c f u n l o c k o 加到对d a t a 的写操作之后( 该a d v i c e 类型为a f t e r ) 。 正由于此,w o r k e r 中关于“锁”的代码都不见了,只保留了数据操作的主要方 法,即核心关注点。而锁操作( 即横切关注点) 会在执行到相应的代码处自动 织入代码中。 通过上例我们已经知道a s p e c t j 是如何从切面c r o s s c u t t i n g 来解决并发访问应 用需求的,其中的关键就是一套类似事件触发的机制。 p o i n t c u t 类似触发器,是事件e v e n t 发生源,一旦p o i n t c u t 被触发,将会产 生相应的动作a c t i o n ,这部分a c t i o n 称为a d v i c e 。 所以a o p 有两个基本的术语:p o i n t c u t 和a d v i c e 。类似于事件机制的e v e n t 武汉理工大学硕士学位论文 和a c t i o n 。上述并发访问实例中的p o i n t c u t 和a d v i c e 如下图所示; f o l a t “t 图1 3p o i n t c 舡t 和a d v i c e 图解 小结: a d v i c e :真正的执行代码,或者说关注的实现,类似a c t i o n 。 j o i np o i n t :代码中激活a d v i c e 被执行的触发点。 p o i n t c u t :一系列的j o i np o i n t 称为p o i n t c u t ,p o i n t f u t 有时代指j o i np o i n t 其中a d v i c e 部分又有: i n t e r c e p t o r :解释器并没有在a s p e c t j 出现,在使用j d k 动态代理a p i 实现的 a o p 框架中使用,解释有方法调用或对象构造或者字段访问等事件,是调用者 和被调用者之间的纽带,综合了d e c o r a t o r 代理模式甚至职责链等模式。 i n t r o d u c t i o n :修改一个类,以增加字段、方法或构造或者执行新的接口。 例如上述并发访问应用中,如果想为每个d a t a 对象生成相应的a s p e c tl o c k , 那么可以在a s p e c tl o c k 中为数据对象增加一个字段l o c k ,如下: a s p e c tl o c k d a t as h a r e d d a t a i n s t a n c e ; l o c k ( d a t a d ) s h a r e d d a t a l n s t a n c e = d : 1 1 武汉理工大学硕士学位论文 i n t r o d u c el o c kd a t a 1 0 c k ;胪隆改d a t a 类,增加一字段l o c k a d v i s ed a t a 0 d a t a 构造时触发 s t a t i ca f t e r 当d a t a 对象生成时,将d a t a 中l o c k 字段赋值为a s p e c tl o c k 为每个d a t a 对象生成相应的a s p e c tl o c k t h i s o b j e c t 1 0 c k = n c wl o c k ( t h i s o b j e c t ) ; ) ) 。 。 上述代码等于在d a t a 类中加入一行: p u b l i cc l a s sv a t q l o c kl o c k = n e wl o c k 0 ; ) 综上所述,我们可以看出使用a o p 有以下优点: ( 1 ) 模块化横切关注点:a o p 用最小的耦合处理每个关注点,使得即使是横 切关注点也是模块化的。 ( 2 ) 系统容易扩展:由于切面模块根本不知道横切关注点所以很容易通过 建立新的切面加入新的功能。 ( 3 ) 设计决定的迟绑定:使用a o p , 设计师可以推迟为将来的需求作决定。 因为他可以把这种需求作为独立的切面很容易地实现。设计时应当考虑的多一 点还是少一点这一问题也就不复存在。 ( 4 ) 更好的代码重用性:a o p 把每个切面实现为独立的模块,模块之间是松 散耦合的f 1 2 】。举例来说,你可以用另外一个日志写入器切面来代替当前的,用于把 日志写入数据库,以满足不同的日志写入要求。松散耦合的实现意味着更好的代 码重用性。 武汉理工大学硕士学位论文 第二章和欣操作系统概述 2 1 和欣嵌入式操作系统 和欣嵌入式操作系统( 以下简称e l a s t o s ) 及其c a r 构件技术,是8 6 3 计划“十 五”重大软件专项、信息产业部产业发展基金、上海科教兴市第一批2 9 个重大项 目之一。 2 1 1 和欣技术的由来 因特网时代以前的传统应用软件,大多是静态链接而成,由某一家公司提供, 所有功能都集成在同一个软件中,一旦链接之后运行时就不可能动态替换其中 的软件模块。那时的操作系统有两大功能:首先它向用户提供一个分时系统: 其次是向用户提供一组函数库【”】。用户程序从主程序起,一步一步驱动软件控 制流程,最终完成计算工作。操作系统始终处于被动地位,为用户程序提供服 务。这类系统的典型范例有d o s 和控制台模式下的u n i x 操作系统,以及目前 存在的大多数嵌入式操作系统 1 4 1 。而在网络普及的时代,这种模式显然已经过 时。程序作为构件自动加载,多个构件互相操作,互相通信,已经成为i n t e r n e t 时代的主要特点。 中间件程序设计技术是i n t e m e t 时代技术的纲。中间件是操作系统根据元数 据生成的构件,i n t e m e t 技术都是围绕中间件发展的。在软件技术的发展中,为 了处理元数据发明了新语言,为了生成中间件发明了虚拟机,为了建立软件工 厂发明了构件库。语言、虚拟机、构件库三位一体形成了当今世界软件编程的 主流发展趋势,而虚拟机实际上可以看成为一种特殊的操作系统【1 5 1 。 科泰世纪科技有限公司基于对i n t e m e t 时代中间件技术发展的深入理解,开 发出具有完全自主版权,采用先进的构件、中间件编程技术构筑的下一代高性 能网络操作系统,并制定了跨操作系统的构件、中间件标准c a r ;提供跨平台 的c a r 构件运行环境、开发平台和构件库;提供支持x m l 等最新i n t e m e t 标准 的浏览器引擎;提供全面的下一代高性能网络操作系统应用开发环境1 1 6 1 。 “和欣”技术体系提供了规范化、开放的接口标准,统合构件技术、操作系统 内核技术、支持构件化软件开发的集成开发环境等创新技术,形成了完整的技 武汉理工大学硕士学位论文 术体系,与国际主流软件技术同步并且兼容【切 2 1 2 和欣嵌入式操作系统简介 e l a s t o s 是一个基于微内核体系结构,支持多进程、多线型堋,具有抢占式、 基于线程的多优先级任务调度的3 2 位嵌入式操作系统。针对嵌入式应用而开发 的e l a s t o s ,具有体积小,速度快,效率高的特点,适合于各种内嵌有3 2 位微电 脑芯片的智能化电子设备1 1 9 1 。 从应用编程的角度看,e l a s t o s 提供了一套完整的、符合c a r 规范的系统服 务构件及系统a p i ,为在各种嵌入式设备的硬件平台上运行c a r 二进制构件提 供了统一的编程环境。 e l a s t o s 还提供了一组动态链接构件库,这些构件库通常是开发嵌入式应用 系统时不可缺少的: 图形系统构件库( 方便开发图形用户操作界面) ; 设备驱动构件库( 各种输入输出设备的驱动) ; 文件系统构件库( e a t 兼容,包括对f l a s h 等的支持) ; 网络系统构件库( t ( z 佃等网络协议支持) 。 e l a s t o s 提供的构件库,以及用户开发的应用程序构件都是通过系统接口与 内核交互,从这个意义上说,它们处于同样的地位。用户可以开发性能更好或 者更符合需求的文件系统、网络系统等构件库,替换由科泰世纪公司提供的构 件库,也可以开发并建立自己的应用程序构件库。这就是基于构件技术的操作 系统的优势之一。 此外,为了方便用户编程,在和欣s d k 中还提供了以下函数库: 与微软w i n 3 2 a p i 兼容的应用程序编程接口( c l a w 3 2 a p i ) : 标准c 运行库( 1 i b e ) ; 和欣提供的工具类函数( e l a u t i l ) 。 所以,在相互兼容的硬件平台上,不管运行的是e l a s t o s 还是w i n d o w s 操作 系统,应用程序可以不加区分地在其上运行。 e l a s t o s 实现并支持系统构件及用户构件相互调用的机制,为c a r 构件提供 了运行环境。关于c a r 构件的运行环境,其描述与“和欣构件运行平台”是一样 的。因此,我们可以把e l a s t o s 看成是直接运行在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论