|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
1.方面库
人人都晓得,各类AOP工具的中心就是切进点(pointcut)和关照(advice)的声明。切进点形貌了主程序实行与方面实行相遇的中央,也就是被横切的地位;关照则形貌了在程序实行过程当中碰到婚配的切进点时应该接纳甚么举动。假定已开辟了一个方面,而且感到它合用于其他项目,那末能够泛化这个方面,并把它断绝到本人自力的项目中,构成一个库,即方面库(AspectLibrary)。方面库供应了某个功效的外部实行逻辑和基本举措措施,经由过程切进点的实例化将方面库与某个特定项目毗连起来。比方供应使用程序功能监督的方面库,完成了一切性能监督相干的办法和关照,某使用程序利用该库的时分,只必要把库的切进点定义为使用特定的毗连点便可,而无需体贴功能监督功效的详细完成。这就是方面库的基础观点。
方面库是AOP工具具有扩大性的表现,今朝经常使用的AOP工具,如JBossAOP、SpringAOP、AspectJ等,都有对方面库的撑持,但因为它们完成AOP的办法分歧,方面库的界说和利用办法也不不异。在JBossAOP和SpringAOP中,关照的完成都是经由过程一般Java语法界说,切进点到关照的绑定是经由过程显式的XML文档大概正文完成的。以是将方面库使用于使用程序就能够很简单地经由过程在XML中或经由过程正文界说新的关照绑定而完成。而且JBoss和Spring体系自己已供应了很好的方面库供用户利用。
AspectJ是Java言语语法和语义的扩大,它供应了本人的一套处置方面的关头字,这些都决意了用AspectJ机关方面库的办法具有必定的特别性。以是AspectJ机关的方面库一向不象JBossAOP和SpringAOP那样广泛,AspectJ也并没有供应任何方面库。使人欣喜的是,AspectJ从AspectJ5版本入手下手供应对正文的撑持,它的编纂工具AJDT中渐渐到场了对方面库的撑持功效,从而使得利用AspectJ机关方面库变得愈来愈简单。本文就来先容怎样用AspectJ机关方面库。
2.AspectJ对方面库的手艺撑持
方面库的完成在于切进点的实例化体例。AspectJ对切进点界说办法的撑持导致了两种完整分歧的方面库完成办法--利用笼统方面(abstractaspect)的办法和利用正文的办法。本章将具体先容这两种体例。
AspectJ是Java言语的扩大。方面在AspectJ言语顶用aspect关头字标示,它类似于Java类,能够界说成笼统的,也存在承继干系。切进点在AspectJ言语顶用关键字pointcut标示,它有一套完全的语法来形貌切进点,也能够界说成笼统的,即没有实践界说的切进点。笼统pointcut只能界说在笼统方面中。如清单1所示,笼统方面A内里界说了一个笼统pointcut名叫publicCall。笼统方面好像笼统类一样,能够被承继,承继笼统方面的方面必需重载笼统pointcut,即付与笼统pointcut实践的界说。如清单2所示,方面B承继了笼统方面A,重载了名叫publicCall的pointcut,给它一个详细的界说。
清单1笼统方面
public abstract aspect A {
abstract pointcut publicCall(int i);
}
清单2承继笼统方面的子方面
public aspect B extends A {
pointcut publicCall(int i): call(public Foo.m(int)) && args(i);
}
AspectJ对承继和笼统的撑持恰是我们机关方面库的基本。笼统方面包括笼统的切进点和详细的关照,正切合方面库的特性,可使用笼统方面来机关方面库文件。承继笼统方面的子方面必需详细化切进点,能够把它看成方面库在详细应用程序中的实行。为了加深了解,我们将在接上去的章节中利用笼统方面手艺制作一个复杂的纪录踪影的方面库,并扩大它以使用到详细项目中。
从AspectJ5入手下手撑持的正文是别的一种机关方面库的手艺基本。Java5引进了正文这类范例,它以正文的情势来表达程序中各成员的元数据信息,接纳标记@标示。Java5中能够被正文润色的Java程序成员有良多,AspectJ5能撑持的正文包括润色方面、办法、属性、机关函数和关照,润色办法和关照的参数的正文也能撑持,可是不撑持pointcut和declare语句上的正文。为了撑持正文范例,AspectJ5扩大了pointcut语法,能够婚配存在大概不存在的正文范例。比方清单3中的名叫onewayMethod的pointcut能够婚配一切被正文@Oneway润色的办法挪用。
清单3含有正文的pointcut
public aspect C {
pointcut onewayMethod: call(@Oneway * *(..));
}
AspectJ5对正文的撑持简化了实行库的办法,我们能够很简单地想到,在把方面库实行到使用程序时,能够使用正文标明详细的切进点的地位。在机关方面库文件时,只必要界说好与正文相干的切进点,并划定该切进点上的详细的关照内容就能够了。我们一样会鄙人面的章节中先容利用正文制造复杂的方面库的过程。
<p>
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架? |
|