Spring中AOP的连接点检测器

点赞:32959 浏览:155306 近期更新时间:2024-03-19 作者:网友分享原创网站原创

摘 要:越来越多的系统开始使用AOP(面向切面编程),面向切面编程越来越重要,但是AOP的连接点丢失问题一直未能很好的解决,该文针对使用Spring框架的系统中日志生成业务设计了一种连接点检测器,可以遍历所有连接点,并在数据库中维护连接点状态.

关 键 词:Spring;AOP;连接点;面向切面编程;连接点丢失

中图分类号:TP311文献标识码:A文章编号:1009-3044(2013)09-2151-03

Spring中可以设定一种规范的方法名前缀来使该方法变成切入点实现切面业务,例如日志,安全验证等.当一个方法运行时spring就会检测该方法是否符合切入点特征,但是这种方法会出现很多人为的失误或者错误,检测如我们不经意的弄错了方法名或者某方法的名称与该前缀相同,这个方法将不会被执行切面的业务或者多余的执行了切面业务,所以我们设计了一种检测器,将所有的连接点存入表中进行维护,来解决人为造成的连接点丢失或错配问题.

1AOP简介及Spring中基于AOP技术对日志的管理原理

1.1AOP简介

它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性[1].AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息.而剖开的切面,也就是所谓的“方面”了.然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹.

图1AOP动态写作技巧实现原理示意图

上图为用动态写作技巧的方式实现AOP的示意图,调用者捕捉到我们的连接点,如图中的原始对象,然后用写作技巧封装对象,写作技巧中加入我们要对关注点实施的操作,如记录,参数验证等.然后将结果返回给调用者,这就简单的实现了一个AOP完整实现过程.

1.2AOP里的重要概念

1)joinpoint(连接点):是程序执行中的一个精确执行点,例如类中的一个方法.它是一个抽象的概念,在实现AOP时,并不需要去定义一个joinpoint[2].

2)pointcut(切入点):本质上是一个捕获连接点的结构.在AOP中,可以定义一个pointcut[3],来捕获相关方法的调用.

3)advice(通知):是pointcut的执行代码,是执行“方面”的具体逻辑[4].

4)aspect(方面):pointcut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系[5].

5)introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的.有的AOP工具又将其称为mixin[6].

上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术.它们也可以是研究AOP技术的基本术语.

2.3AOP技术的缺点分析

AOP技术产生的结构冲突问题,我们可以利用反射机制来解决[7].采用AOP技术将横切代码与基础代码分离,这样虽然减少了代码的冗余且方便代码的管理,但是会产生一个结构冲突的问题,如果程序被多次修改,aspect面的程序和连接点的连接可能被影响到.所以就出现了反射机制,如果利用反射机制,在AOP切面代码编织进入连接点时,在这切面与连接点中间形成一个定义层,通过这个定义层来解决程序被修改而导致的结构问题[8].


AOP技术产生的连接点丢失和错误配置问题,我自己开发设计了一种连接点统一管理的机制来解决这个问题.在基于AOP的系统设计中,连接点的定义一般会以一种规则形式[9],如果连接点因为某些人为原因或者程序的修改,导致某些连接点丢失,或者错误匹配到了不同的aspect切面上,就导致了连接点丢失错配问题[10].如果我们把所有的连接点进行统一的存储管理,每次系统程序修改后,我们利用这个连接点管理机制对连接点进行统一检测,然后发现其中的问题,我们就可以发现并解决出现错误的问题,把有问题或者有可能出现问题的连接点导出一个连接点报告,这样我们就可以直观有效的发现出现的问题,从而解决连接点丢失和连接点错配的问题.

2.4连接点管理机制的提出

在一个基于AOP的系统中,会有非常多的连接点,这些连接点都是我们进行定义的,但是在定义的时候,可能会出现一些人为的失误或者程序修改造成的连接点出现问题,所以我们提出了连接点管理机制.

连接点的管理机制主要思想就是把程序中所有定义过的连接点进行统计存储,当我们程序修改后,启动这个连接点管理机制,我们就可以通过我们存储的信息,与程序修改后更新的连接点信息进行比较,得出有问题的连接点.

比如在Spring框架中,可以设定一种规范的方法名前缀来使该方法变成切入点实现切面业务[11],我们针对这个原理,通过一种方式,将一个包内所有的类中,所有符合的方法进行收集整理,存入数据库中,对他们的状态进行维护,每次检测都会得出连接点的丢失与改动的详细记录.通过这种方式来推断连接点的安全与否.

3基于AOP的连接点检测器的实现

3.1基于AOP的连接点检测器的原理

在Spring框架中,可以设定一种规范的方法名前缀来使该方法变成切入点实现切面业务,我们针对这个原理,通过一种方式,将一个包内所有的类中,所有符合的方法进行收集整理,存入数据库中,对他们的状态进行维护,每次检测都会得出连接点的丢失与改动的详细记录.通过这种方式来推断连接点的安全与否.3.2数据库的设计

在整个检测器的设计中,数据库是非常重要的一个环节,我们要将所有的方法存入到数据库中进行维护,通过数据库的方式,可以直观快速的找到问题的所在.

数据库的重要字段:UID,methodName,methodClass,methodPackage,state.UID是方法的唯一标识,methodName,methodClass,methodPackage表示出方法的名字,来自于哪个类,哪个包,可以唯一确定一个方法.State是方法的状态,表示出这个方法是否为丢失连接点或者是新加入的连接点.

3.3具体的实现方法

检测器的输入为包名和在Spring中设置的方法名的正则式,如*add.输出为变动的方法名及变动原因.

1)首先在Spring的日志程序段中加入对所捕捉到的切入点方法名的检测程序,如果此方法没有在数据库中,则将此方法存入数据库,如果已经存在数据库中的话,则不进行任何操作.

2)输入包名及正则式,遍历整个包,将所有的类找出存入LIST.输入以包名为单位,遍历整个包中的所有类,存入一个LIST.

3)遍历所有类中,符合正则式的方法存入CLASSLIST.通过LIST,挨个将类取出进行遍历,通过Field[]fields等于a.class.getFields();Method[]methods等于a.getMethods();这两个方法把类中的所有方法存入一个LIST中,然后通过输入的正则式筛选出符合条件的方法,将他们存入的MethodList中.

4)查询表中数据,如果是第一次运行则将MethodList所有方法插入表中,如果不是第一次运行则与MethodList对照.

3.4连接点管理机制算法

步骤1遍历所有连接点.得到LIST1

步骤2查询joinpoint表得到连接点LIST2

步骤3比较LIST1LIST2的长度

步骤4如果LENGTH1等于LENGTH2那么比较LIST1和LIST2中的连接点是否一致

步骤5如果LENGTH1!等于LENGTH2且LENGTH1

步骤6如果LENGTH1!等于LENGTH2且LENGTH1>LENGTH2查找LIST1中多出的连接点

步骤7导出结果,得到连接点的改动.

4结束语

本文的设计的检测器,针对Spring框架,利用此检测器可以有效的避免连接点丢失,连接点错配的问题,因为有数据库对所有符合的方法进行维护管理,可以直观而且快速的检测到问题的所在.但是由于使用到了数据库,而且要遍历整个工程包,所以工作量会比较大,如果工程太大的话,检测的效率会是个问题.

65306;1-82.

[4]YEPeng,NIYou-cong,HUMing.Researchonmeasurementtech-niqueforevaluatingadaptabilityofaspect-orientedsoftwarearchitec-ture[M].AdvancedMaterialsResearch,2011,268-270:1307-1312.

[5]Garcia-magarinoI,CossentinoM,SeiditaV.Ametricssuiteforevaluatingagent-orientedarchitectures[C].Procofthe25thACMSymposiumonAppliedComputing,2010:912-919.

[6]SANT’’ANNAC,GAMEZN,GARCIAA,etal.Generalarchitectureevaluationprocess/metrics,AOSD-EuropeDeliverableD85[Z].2007.

[7]JonesM,HamlenKW.DisambiguatingAspect-OrientedSecurityPoli-cies[C].Proceedingsofofthe9thInternationalConfidenceonAspect-OrientedSoftwareDevelopment(AOSD’’10).2010.

[8]ClementA,ColyerA,HarleyG,etal.Usingeclipseaspect:yourfirststeps[EB/OL].http://.informit./articles/article.aspx?p等于357692.

[9]LilianaDobrica,EilaNiemela.Asurveyonsoftwarearchitectureanalysiethods[M].IEEETransactionsonSoftwareEngineering,2002.

[10]JosephD.Gradecki,NicholasLesiecki.MasteringAspect:Aspect-OrientedProgramminginJa[Z].2005

[11]Sant’AnnaC,LobatoC,KuleszaU,etal.Onthequantitativeassesentofmodularmulti-agentsystemarchitectures[C].ProcofInternationalConferenceonMultiagentSystemsandSoftwareArchitecture.London:Springer-Verlag,2006:111-135.

Spring中AOP的连接点检测器参考属性评定
有关论文范文主题研究: 关于数据库的论文范本 大学生适用: 电大论文、学位论文
相关参考文献下载数量: 35 写作解决问题: 毕业论文怎么写
毕业论文开题报告: 论文提纲、论文选题 职称论文适用: 核心期刊、中级职称
所属大学生专业类别: 毕业论文怎么写 论文题目推荐度: 经典题目

猜你想找