可复用方面库的构建方法及系统与流程

文档序号:13222049阅读:149来源:国知局
技术领域本发明涉及面向方面编程中方面库的构建领域,尤其涉及一种可复用方面库的构建方法及系统。

背景技术:
AOP(面向方面编程)是一种关注点分离技术,基本思想是通过分别描述系统的不同关注点(属性或者兴趣)及其关系,以一种松耦合的方式实现单个关注点,然后依靠AOP环境的支撑机制,将这些关注点组织或编织成最终的可运行程序。在AOP中,关注点是一个非常重要的概念,可以定义为:为满足系统目标而必须实现的一个特定的需求或功能。软件的关注点分为两类:核心关注点(coreconcern)和横切关注点(cross-cuttingconcern)。核心关注点是指一个模块中最主要、最核心的功能,而横切关注点则是横跨多个模块的次要功能,这些功能一般都是核心功能的外围需求。例如,一个典型的企业应用程序除了实现核心业务功能之外,还必须实现一系列的横切功能。包括安全验证、日志记录、资源管理,性能监视、事务完整性和错误检测等,这些功能常常横跨多个模块。面向方面编程技术为软件开发人员提供了一种新型的编程范式,弥补了现有的面向对象技术中难以模块化横切关注点的不足,因此得到了学术界和工业界的广泛关注。AOP通过引入方面(aspect)和切点(pointcut)的概念表达模块之间的横向关系,分离横跨多个模块的关注点,从而更加清晰地划分模块的职责,提高了软件系统的可扩展性、可维护性和灵活性。AspectJ语言是目前最流行的面向方面编程语言。它是对Java语言的在面向方面的扩展,它既是一种规约语言,也是一种AOP的实现语言。AspectJ使用Java语言实现单个关注点,并通过对Java进行扩展的Aspect机制实现横切关注点,它还提供了编织(weaving)规则。AspectJ向Java语言增加了连接点,切点,通知,方面这几种特定的语言结构。这些扩展实现了AOP的核心思想,从而让使用AspectJ编程的程序能无缝集成核心关注点和横切关注点。AspectJ是Java语言语法和语义的扩展,它提供了自己的一套处理方面的关键字,这些都决定了用AspectJ构造方面库的方法具有一定的特殊性。所以AspectJ构造的方面库一直不像JBossAOP和SpringAOP那样普遍,AspectJ也并没有提供任何方面库。令人欣慰的是,AspectJ从AspectJ5版本开始提供对注释的支持,它的编辑工具AJDT中逐渐加入了对方面库的支持功能,从而使得使用AspectJ构造方面库变得越来越容易。本研究将基于AspectJ构建可复用的方面库。在编程语言发展史中,可重用库的引入很大地提高了编写程序的准确性和快速性,提高了软件重用能力,面向过程的编程和面向对象的编程都对可重用库提供了支持,那么面向方面的编程也不例外。假设已经开发了一个方面,并且感觉它适用于其他项目,那么可以泛化这个方面,并把它隔离到自己独立的项目中,形成一个库,即方面库(AspectLibrary)。方面库提供了某个功能的内部执行逻辑和基础设施,通过切入点的实例化将方面库与某个特定项目连接起来。例如提供应用程序性能监视的方面库,实现了所有性能监视相关的方法和通知,某应用程序使用该库的时候,只需要把库的切入点定义为应用特定的连接点即可,而无需关心性能监视功能的具体实现。这就是方面库的基本概念。面向方面编程作为一种优秀的编程范式,已经广泛应用与实际开发。面向方面的程序设计是指在设计阶段就将横切关注从系统中提取出来。在实现阶段,将这些横切关注封装成单独的编程模块(方面,aspect)。最后通过一定的静态或动态编织技术将这些横切关注代码自动注入回系统,从而实现了对横切关注点的封装和集中管理。因此,面向方面编程不仅要保留面向对象程序设计方法对核心关注点的封装和重用,还要能够非常有效地对横切关注点进行封装和集中管理。然而,目前关于如何对已有的封装了横切关注点的方面进行有效的描述、检索、管理等操作以达到有效复用方面的问题研究并没有得到足够重视。刘敬勇在《面向方面的可配置实时系统开发方法》中提到了从组件与方面库中选择合适的组件和方面组成可配置的实时系统。该文章提到的方面库只是根据实时系统的需求,设计了并发控制方面包、日志与恢复方面包、QoS方面包这三个方面包。并没有在更广泛的应用上对方面库进行定义和构建。面向方面编程不仅要保留面向对象程序设计方法对核心关注点的封装和重用,还要能够非常有效地对横切关注点进行封装和集中管理。然而,目前关于如何对已有的封装了横切关注点的方面进行有效的描述、检索、管理等操作以达到高效复用方面的方法研究并没有得到足够重视。

技术实现要素:
本发明的目的是提供一种可对封装了横切关注点的方面进行有效的描述、检索、管理等操作的可复用方面库的构建方法,并提供方面库管理工具和自动生成具体方面的方法,提高面向方面编程中方面复用的效率。为实现上述目的,所采用的技术方案是:提供一种可复用方面库的构建方法,包括以下步骤:步骤1:设计方面库元模型,每个方面封装了横切关注点,将方面根据功能类型进行分类,一个方面库包含一个描述方面的XML文件;步骤2:添加抽象方面源文件到方面库;步骤3:解析抽象方面源文件,获取抽象方面的功能描述;步骤4:将获取的抽象方面的功能描述信息作为新的方面描述结点添加到XML文件中,生成新的XML文件。步骤5:通过查询算法查询XML文件,找到对应抽象方面;步骤6:从查询出的抽象方面中选择需要具体化的抽象方面,为每一个抽象切点输入具体切点定义;步骤7:将具体切点定义写到具体切点注解中,生成具体方面源文件。本发明所述的可复用方面库的构建方法中,每个抽象方面包括:方面名称、方面功能描述、抽象切点、通知、类型间声明、方法、属性。本发明所述的可复用方面库的构建方法中,抽象方面的功能描述包括方面名,抽象切点列表和通知列表。本发明所述的可复用方面库的构建方法中,所述XML文件的二级结点是功能分类结点,与方面的功能类型分类对应;三级结点是每个抽象方面的描述结点,其子节点包括:方面名、文件路径、功能描述。本发明还提供了一种可复用方面库的构建系统,包括:方面库元模型建立模块,用于设计方面库元模型,将方面根据功能类型进行分类,一个方面库包含一个描述方面的XML文件;抽象方面的功能描述获取模块,用于添加抽象方面源文件到方面库,并解析抽象方面源文件,获取抽象方面的功能描述;XML文件更新模块,用于将获取的抽象方面的功能描述信息作为新的方面描述结点添加到XML文件中,生成新的XML文件。具体方面源文件自动生成模块,用于通过查询算法查询XML文件,找到对应抽象方面;从查询出的抽象方面中选择需要具体化的抽象方面,为每一个抽象切点输入具体切点定义;将具体切点定义写到具体切点注解中,生成具体方面源文件。本发明所述的可复用方面库的构建系统中,每个抽象方面包括:方面名称、方面功能描述、抽象切点、通知、类型间声明、方法、属性。本发明所述的可复用方面库的构建系统中,抽象方面的功能描述包括方面名,抽象切点列表和通知列表。本发明所述的可复用方面库的构建系统中,所述XML文件的二级结点是功能分类结点,与方面的功能类型分类对应;三级结点是每个抽象方面的描述结点,其子节点包括:方面名、文件路径、功能描述。本发明产生的有益效果是:通过XML文件描述方面功能信息,可以直接根据所需功能查询对应抽象方面,输入抽象切点的具体定义即可自动生成具体方面,提高方面复用效率。附图说明下面将结合附图及实施例对本发明作进一步说明,附图中:图1为本发明实施例的可复用方面库的构建方法流程图;图2为本发明实施例的方面库元模型;图3为本发明实施例的方面库管理工具界面示例;图4为本发明实施例的查询抽象方面示例;图5为本发明实施例的创建具体方面示例;图6为本发明实施例可复用方面库的构建系统结构示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。本发明实施例的可复用方面库的构建方法,如图1所示,包括以下步骤:步骤1:设计方面库元模型。本发明的一个实施例中,如图2所示,为方面库元模型,将方面根据功能类型分为:日志管理、权限控制、事务处理、资源管理、性能监视、和错误检测等分类,可以根据实际使用情况增加分类。每个抽象方面包括:方面名称、方面功能描述、抽象切点、通知、类型间声明、方法、属性。一个方面库包含一个描述方面的XML文件,该文件的二级结点是功能分类结点,与方面的功能类型分类对应;三级结点是每个抽象方面的描述结点,其子节点包括:方面名、文件路径、功能描述。步骤2:添加抽象方面源文件到方面库。将使用AspectJ语法定义的抽象方面源文件按功能分类添加到方面库中。实施例中,方面库管理的抽象方面使用AspectJ语法定义方面,即使用Aspect注解将抽象JAVA类定义为抽象方面,使用Pointcut注解将抽象方法定义为抽象切点,使用Before、After、AfterReturning、AfterThrowing和Around注解将方法定义为通知。图3所示是方面库管理工具界面,选择方面库路径,加载之后会得到按功能分类的方面树状图。步骤3:使用JDTAPI解析方面源文件,获取抽象方面的功能描述,方面名,抽象切点列表,通知列表。抽象方面初次添加到方面库中时使用EclipseJDT工具解析源文件,获取源文件中功能描述注释,方面名,抽象切点列表,通知列表。实施例中,通过抽象方面源文件路径实例化CompilationUnit对象,使用CompilationUnit的types()方法得到TypeDeclaration对象;使用getCommentList()方法得到注释列表,经过处理得到方面功能描述信息。使用TypeDeclaration的getMethods()方法得到方法列表,经过处理得到抽象切点列表和通知列表。步骤4:生成XML文件描述方面信息。将上一步得到的抽象方面描述信息生成新的方面描述结点添加的XML文件中。实施例中,在XML文件中,为每一个抽象方面生成一个包含方面名,源文件路径,功能描述信息的结点,添加到相应功能分类的结点下。步骤5:使用dom4j查询算法查询XML文件,找到对应抽象方面;当根据功能搜索抽象方面时,采用dom4j查询算法,支持模糊查询,查询到具有相关功能描述的抽象方面,供用户选择。实施例中,使用dom4j查询算法在XML文件查询到具有相关描述信息的方面描述结点,并返回该抽象方面的源文件路径和完整功能描述。图4所示是方面库管理工具查询到抽象方面的示例,显示了所选抽象方面的名称,功能描述,抽象切点列表和通知列表。并提供对该抽象方面进行修改和创建具体方面的按钮。步骤6:将抽象切点具体化;用户从上一步查询出的抽象方面中选择需要具体化的抽象方面,为每一个抽象切点输入具体切点定义。实施例中,选择需要具体化的抽象方面之后,使用步骤3的方法得到抽象切点列表和通知定义内容,用户可以依次定义具体切点。图5所示是创建具体方面示例,根据抽象方面的抽象切点列表,用户可以输入具体的切点定义内容,下方是生成具体方面源文件按钮,点击后会根据用户的切点定义生成源文件保存。步骤7:使用JDTAPI生成具体方面源文件。使用JDT工具生成一个继承了抽象方面的具体方面源文件,并将上一步得到的切点定义写到具体切点注解中。实施例中,通过AST类得到CompilationUnit对象和TypeDeclaration对象,使用TypeDeclaration的setName()方法设置为用户定义的类名;使用setSuperclassType()方法设置父类为选定的抽象类。使用MethodDeclaration对象创建空方法,添加Pointcut注解,并将参数设为用户自定义的具体切点定义。本发明的可复用方面库的构建系统,用于实现上述构建方法,如图6所示,包括:方面库元模型建立模块,用于设计方面库元模型,将方面根据功能类型进行分类,一个方面库包含一个描述方面的XML文件;抽象方面的功能描述获取模块,用于添加抽象方面源文件到方面库,并解析抽象方面源文件,获取抽象方面的功能描述;XML文件更新模块,用于将获取的抽象方面的功能描述信息作为新的方面描述结点添加到XML文件中,生成新的XML文件。具体方面源文件自动生成模块,用于通过查询算法查询XML文件,找到对应抽象方面;从查询出的抽象方面中选择需要具体化的抽象方面,为每一个抽象切点输入具体切点定义;将具体切点定义写到具体切点注解中,生成具体方面源文件。其中每个抽象方面包括:方面名称、方面功能描述、抽象切点、通知、类型间声明、方法、属性。抽象方面的功能描述包括方面名,抽象切点列表和通知列表。XML文件的二级结点是功能分类结点,与方面的功能类型分类对应;三级结点是每个抽象方面的描述结点,其子节点包括:方面名、文件路径、功能描述。应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1