分享
 
 
 

使用 AOP 来维护遗留 Java 应用程序

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

处理复杂和不熟悉 Java 代码的技术

级别:中级

Abhijit Belapurkar(abhijit_belapurkar@infosys.com)

高级技术架构师,Infosys Technologies Limited

2004 年 3 月

假如您曾经接管并且必须维护某个基于 Java 的应用程序,那么本文就是为您预备的。作者 Abhijit Belapurkar 将向您展示如何使用面向方面编程(ASPect-oriented programming,AOP)来对即使最不透明的遗留应用程序获得前所未有的见解。

软件系统通常从一组有限的得到良好理解的需求开始。然而,随着大多数成功系统的演进,它们承担起越来越多的需求,体现在无数的功能和非功能性方面。在一个企业环境中,您最终很轻易向这个混乱的模块组合添加许多第三方库和框架,它们全都彼此交互,并在系统日常工作的表面之下相互配合。实际上,用不了多少年,最初具有很简单、可治理的需求集的系统就会变成庞然大物:难于控制和笨拙的代码。

于是步入这种环境的 Java 开发人员就有了一个日常维护和改进的新任务。假如您就是这个开发人员,那么您的第一个任务就是深刻理解该系统的结构。理解结构将是增强系统和诊断不可避免会发生的问题的要害。当然,第一次探究任何未知的系统都是说起来轻易做起来难。在某些情况下,您能够咨询原先的开发人员,而在其他情况下却不能。但是即使能够找到原先的开发团队,有些系统也会因为太过庞大,而无法在没有机械帮助下熟悉和理解它。

虽然有许多可用的工具能够帮助您理解复杂的程序(请参阅 参考资料),但是大多数工具都很昂贵、学习起来很耗时间,并且功能范围有限(也就是说,假如该工具无法满足需要,您将求助无门)。在本文中,我将建议一种替代的方法。面向方面编程是成熟的编程范型,它可以应用于广泛的编程场景,包括遗留应用程序的理解和维护。

请注重,本文假设您大致熟悉 ASPectJ 之下的 AOP,非凡是 ASPectJ 的静态和动态横切技术。虽然我将在下一节提供关于 AOP 横切的简要概述,但是您应该参考 参考资料,获取更多信息。

总体概述

基于 Java 的 AOP 使用了灵活而丰富的表达语言,您可以使用它以近乎无限种方式来分解复杂的应用程序。基于 Java 的 AOP 的语法类似于 Java 语言,您应该很轻易就会把握它。一旦把握,AOP 就是一种具有许多应用的编程技术。除了理解遗留系统内部细节外,您还可以使用 AOP 来非强制性地重构和增强这样的系统。虽然本文将完全使用 ASPectJ,不过这里讨论的大多数技术都可移植到其他流行的基于 Java 的 AOP 实现,比如 ASPectWerkz 和 JBossAOP(请参阅 参考资料)。

关于横切

任何应用程序都由多个功能性和系统性关注点(concern)组成。功能性 关注点与应用程序的日常使用相关,而 系统性 关注点则与系统的整体健康和维护相关。例如,一个银行应用程序的功能性关注点包括账户维护和答应借/贷操作,它的系统性关注点包括安全、事务、性能和审计日志记录。即使使用最好的编程方法学来开发应用程序,您最终也会发现它的功能性和系统性关注点会以跨越多个应用程序模块的形式相互混杂在一起。

横切 是一种 AOP 技术,用于确保独立的关注点保持模块化,同时仍然足够灵活地在整个应用程序中的不同点应用。横切包括静态和动态两种类别。动态横切 体现为通过在感爱好的特定点织入(weave in)新的行为来改变对象的执行行为。静态横切 答应我们通过注入(inject in)附加的方法和/或属性来直接改变对象的结构。

静态横切的语法与动态横切很不相同。以下术语适用于动态横切:

连接点(join point)是 Java 程序中的某个特定执行点,比如某个类中的一个方法。

切入点(pointcut)是特定于语言的结构,它表示或捕捉某个特定的连接点。

通知(advice)是在到达某个特定的切入点时要执行的一段代码(通常是一个横切功能)。

方面(ASPect)是定义切入点和通知以及它们之间的映射的一个结构。方面由 AOP 编译器用来在现有对象中的特定执行点织入附加功能。

本文中的所有代码演示都将利用动态横切。请参阅 参考资料,获得关于静态横切的更多信息。

ASPectJ 之下的 AOP

为了学习本文中的例子,您应该熟悉以下特定于 ASPectJ 之下的 AOP 的特性。

ASPectJ 提供一个名为 ajc 的编译器/字节代码织入器,它编译 ASPectJ 和 Java 语言文件。ajc 根据需要将方面交织在一起,以产生与任何 Java 虚拟机(1.1 或更高版本)相容的 .class 文件。

ASPectJ 支持如下这样的方面,即这些方面规定某个特定的连接点应该永远不会到达。假如 ajc 进程判定出情况不是这样,它将发出一个编译时警告或错误(具体取决于该方面)。

应用程序和系统分析

在下面几节中,您将学习两种使用 AOP 的不同的应用程序和系统分析机制。第一种机制我称之为 静态分析,它要求您做以下事情:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有