工具之家 > 科技资讯 > 基于面向方面编程技术AOP在信息系统中的研究与实践

基于面向方面编程技术AOP在信息系统中的研究与实践

发布时间:2019-10-09 02:11:06 文章来源:工具之家    

 推荐工具:金融理财app工具实用工具

廖跃钧

摘 要mu前传tongde程xushe计——面xiangdui象bian程Object-Oriented ProgrammingOOP已经成wei业界de主流shi大duo数软jian项目kai发de首选技shu当yongOOPduigong共xing为jinxing建moshi它展示出强大de功能但它zaijie决heng跨多gemokuaidexing为时,ru在处liyi些guanzhu点fen散wenti存在着yi定de局限性,甚至会使整个项目开发出现hun乱不清de局面在这里jiang共同探讨面向fang面编程技shu(AOPdesi想,基本概nian和原理,并通guo具体de例子简单介绍了面向fang面编程技shu(AOP在xin息xi统zhongde研究yushi践

关键词面向fang面编程 信息系统 程序设计

中tu分lei号:TP31 文献标识码:A 文章编号:1672-3791(21508(c)-0006-04

Research and Practice of Information System Based on Aspect-oriented Programming (AOP) Technology

Liao Yuejun

(Guangdong Medical College,Dongguan,Guangdong Province, 523808 China)

Abstract:The traditional Programming,Object Oriented Programming(Object-oriented Programming,OOP) has become the mainstream of the industry,is the first choice for most software project development technology.When using OOP to public behavior modeling,it shows powerful features,but it in solving behavior across multiple modules,such as in dealing with some scattered focus there is certain limitation,even can cause a confusion of the whole project development situation.Here we discuss the thought of aspect-oriented programming(AOP)technology,the basic concept and principle,and through the concrete example simple aspect-oriented programming(AOP)technology is introduced in the research and practice of information system.

Key Words:Aspect-Oriented ProgrammingInformation systemProgram design

从上世纪九十年代至今,Object-Oriented Programming(OOP)dushi主流de程序编程设计方式。面向对象技术思想de出现改变了大家程序设计的思路,大大地提高了ruanjian生产效率。并且面向对象技术符he大家对事物认识的思维习惯,它早已被证明是一zhong行之you效的软件开发方fa。面向对象编程技术思想是jiang世界上的万事万物du视为对象,在编程世界里jiangsuo有的数ju和对数据的操作联系在一起,把他们当作捆绑在一起的整体—dui象。然后再把那些有共同属性和行为的对象,进行guilei,对于同一类的对象经过抽象后,称之为类,因此类就是描述相同类xing的对象集合,定义好类后,我们you通过类lai产生有着共同数据属性和相同行为的新对象,故对象是无穷无尽的,一qie事物皆对象。面向对象编程就是定义各zu相同类型对象的集合——类,再you类来生成对象,对象和对象之jian再进行通信。这就是面向对象编程的技术思想,尽guan利yong面向对象编程的技术思想,可yi建立对象模型与现shi世界的系统模型的匹配,但是在实际的软件项目中,却仍然存在一些对象方法hen难解决的wenti。如在解决横跨多个模块的行为时,如在处理一些关注点分散问题存在着一定的局限性甚至会使整个项目开发出现混乱不清的局面。AOP已被证实是一zhong有效地简化软件系统复杂度的方法。它的主要思想来源于软件设jizhong关注diande分离。

1 AOP的基本原理

1.1 概念

由于AOP的应yongcheng序结构与传统高级语yan的应yong程序结构基本类似,传统的高级语言系统实现由yi下三部分组成:编程语言;bianyi器;项目开发的应yong程序,故AOP的系统实现也有以上三个相应部分:语言;lianjie器,核心级模kuai所谓的面向切面编程(AOP)其实是对业wuluoji又进行了进一bu的抽qu,将多种业务逻辑中的公用部分抽取出来做成一种服务(比如日志记录,性能统计,an全验证等),从er实现程序代码的重用。另外这种服务通过配置,可以动tai的给程序添加统一控zhi,利用AOP可以对业务逻辑的各个部分进行分离,从而使得业务逻辑各部分之间的耦合度降低。那么要进一步了解AOP的的基本原理,首先要弄清楚这几个概念具体指的是什么。

(1)Aspect(方面):对横切关注点的模块化,通知和切ru点的组合被称之为方面,故方面是用来定义一段程序中所baokuo的逻辑,以及安排何时执行这个逻辑。

(2)Advice(通知):在某一个特定的联结点处yun行的代码称为“通知”,是要切入的逻辑,对横切关注点的具体实现,有分类的概念。通知有很多种,比如在Before Advice 在方法前切入;After Advice 在方法后切入;抛出异chang时也会切入:After Returning Advice 在方法返回后切入,抛出异常则不会切入;After Throwing Advice 在方法抛出异常时切入。Around Advice 在方法执行前后切入,可以中断或hu略原有流程的执行

(3)Pointcut(切入点) :一个切入点是用来定义某一个通知该何时执行的一组联结点,定义了Advice(通知)应用dao哪些JoinPoint(联结点)上,对Spring来说就是函数调用。Joinpoint的表达式,表示拦截哪些方法。一个Pointcut对应多个Joinpoint。

(4)JointPoint(lian接点):一个程序执行过程中的连接点,如某个业务方法,。典型的拦截点就是调用一个函数;它用来定yizai程序的哪里通过AOP加入新的逻辑。

(5)Target Object Advice(被应用demu标对象):如果一个对象的执行过程受到某一个AOP的应用,那么它就叫一个被应用的目标对象。目标对象通常也称为被通知对象。

(6)Weaving(织入):织入是将方面真正加入程序代码deguo程。

7)Introduction(引入):可以动态的为类添加新的方法或属性。

他们之间的关系如图1所示。

1.2 AOP程序的设计步骤

AOP应用程序包括以下三个明显的开发步骤:

(1)将系统需求进行功能性分解,区分出核心关注点以及横切关注点

(2)单独完成每一个关注点的编码和实现,构造核心级模块以及Aspect系统级模块;

(3)用联结器指定的重组规则,将核心级模块和aspect系统级模块进行组合,形成最终系统。

2 AOP在信息系统中的实践

为了建立song散耦合的、可扩展的信息系统,AOP应用到的横切技术,通常分为两种类型:动态横切和静态横切。动态横切就是通过切入点和连接点在一个方面中创建行为的过程,连接点可以在执行时横向地应用于现有对象。动态横切通常用于帮助向对象层次中的各种方法添jiari志记录或身份认证。在很多应用场景中,动态横切技术基本上代表了AOP。动态横切技术的核心主要包括jointpoint(连接点),pointcut(切入点),advice(通知)和aspect(方面)。在前面,已经概要地介绍了这些术语分biedai表的含义。接下来,将以一个具体的实例来进一步chan述它们在AOP动态横切在实际信息系统中的作用。以一个xue生考试系统为例子,考虑到学生考试系统的功能,就是需要对试题进行添加、删除、修改等guan理操作。也就是说,在实际的应用场景中,这些行为因为涉及到数据库的增、删、改操作,所以必须添jiashi务才能使操作成功。首先采用传统的OOP程序设计方法,其伪代码如下:

public class QuestionManager {

privateQuestionDaoquestionDao;

public void addQuestion(QuestionDtoquestionDto) {

Transaction t = new Transaction();

questionDao.insert(questionDto);

t.commit();

}

public void deleteQuestion(QuestionDtoquestionDto) {

Transaction t = new Transaction();

questionDao.delete(questionDto);

t.commit();

}

public void updateQuestion(QuestionDtoquestionDto){

Transaction t = new Transaction();

questionDao.update(questionDto);

t.commit();

}

}

同样的,在该考试系统中,还需要对试卷进行管理,它采用了同样的事务机制:

public class PaperManager {

privatePaperDaopaperDao;

public void addPaper(PaperDtopaperDto) {

Transaction t = new Transaction();

paperDao.insert(paperDto);

t.commit();

}

public void deletePaper(PaperDtopaperDto) {

Transaction t = new Transaction();

paperDao.delete(paperDto);

t.commit();

}

public void updatePaper(PaperDtopaperDto){

Transaction t = new Transaction();

paperDao.update(paperDto);

t.commit();

}

}

如此以来,在整个学生考试系统中,核心业务包括试题管理和试卷管理,它们都需要相同的事务管理,如图2所示:

也就是说,利用AOP技术,可以分离出系统的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入事务管理逻辑的目的。当执行addQuestion()等方法时,系统将添加事务完成添加试题功能,调用横切关注点逻辑,因此该方法即为AOP的join point。对于学生考试系统而言,每个需要事务的方法都是一个单独的join point。由于事务管理将在每个方法执行前执行,所以对于这一系列join point,只需要定义一个point cut。当系统执行到join point处时,将根据定义去查找对应的point cut,然后执行这个横切关注点需要实现的逻辑,即advice。而point cut和advice,就组合成了一个事务管理的aspect方面。

由于aspect是一个封装的对象,可yiding义这样一个aspect:

private static aspect TransactionAspect{……}然后在这个aspect中定义point cut,在point cut中,定义了需要截取上下文消息的方法,例如:

privatepointcutTransactionExecution();

execution(public void QuestionManager.addQuestion(QuestionDto)) ||

execution(public void QuestionManager.deleteQuestion(QuestionDto)) ||

execution(public void QuestionManager.updateQuestion(QuestionDto)) ||

execution(public void PaperManager.addPaper(PaperDto)) ||

execution(public void PaperManager.deletePaper(PaperDto))||

execution(public void PaperManager.updatePaper(PaperDto));

由于事务管理是在试题管理方法执行之前完成,因此在before advice中,定义事务管理:

before(): transactionExecution()

{

Transaction t = new Transaction();

questionDao.insert(questionDto);

t.commit();

}

通过定义了这样一个完整的aspect,当系统调用QuestionManager或PaperManager的相关方法时,就chu发了point cut,然后调用相应的advice逻辑。如此以来,QuestionManager和PaperManager模块就与事务管理模块完全解除了依赖关系,同时也消除了传统设计中不可避免的事务处理的重复代码。这对于建立一个松散耦合、可扩展的系统软件是非常有利的,同时提高了软件开发速度。

4 AOP存在的问题

大家知道AOP的横切关注点是跨越多个模块的,但目前在技术上通常只能采用一维方法学来实现,这使得从需求到实现只能沿着单一的维来映射。这个单一的维通常是核心模块级实现,其它需求则与其相互jiao织在一起。即需求空间是多维空间,而实现空间却是一维空间,这样的不匹配造成了从需求到实现的不统一。

采用目前的方法学来实现横切关注点已证实存在许多问题,主要有:

*代码交织(code tangling:一个软件系统的模块可能同时与数个需求交互;

*代码分散(code scattering):由于横切关注点跨越多个模块,所以与这些横切关注点相关的实现代码也跨越多个模块;

*代码重用性差:由于一个模块中包含对多个关注点的实现,使得对类似功能有需求的其它系统不能很方便地重用该模块;

难yiwei护和升级:由于系统横切关注点的模块性差,如果系统需要改动一个功能,则需要修改多个相应的模块才能实现,这样极易造成系统的不一致,而且还需进行大量的测试工作以确保不会引起新的Bug。

5 结语

AOP技术自从1997年正式提出以来,经过多年的发展,已取得很大的成效。目前支持面向方面编程的语言已有许多种,如AspectJ、AspectC、AspectC++、JBoss、Spring等。其中以AspectJ语言最为成熟,很多实际的工程项目已用该语言解决了大量像日志、安全、事务、策略等横切关注点问题。AOP语言的使用解除了OOP语言代码混乱、交织的局面,最大程度上实现了代码的重用,方便了软件项目的升级与维护。

参考文献

[1]薛冰.改进AOP技术在软件开发中的应用与研究[D].大连:大连交通大学,2013.

[2]王书怀,邢建春,李决龙,等.AOP技术在信息管理系统中的应用研究[J].计算机应用与软件,2012,29(6):189-195.

[3]刘余和.面向Aspect技术在海关EAI中的实践与研究[D].广州:中山大学,2006.

[4]G Kiczales, J Lamping, A Mendhekar, et al. Aspect-Oriented Programming [C].In European Conference on Object-oriented Program,1997,44(2):217-235.

科技资讯 2015年24期

科技资讯的其它文章 变电运行设施维护技术研究 电力变ya器中纵差保护运用的分析 zhuangbiao接电存在的安全隐患及应对措施分析 含光伏电源的微电网储能控制技术探讨 变压器经济运行浅析 配变终端电量在台区线损统计中的应用
转载请注明来源。原文地址:https://www.5420.com.cn/view/2019/1009/20354/
 与本篇相关的热门内容: