APP下载

AOP技术在Web系统日志和事物管理中的应用

2018-01-08唐念刚

电子设计工程 2017年16期
关键词:事务管理切入点日志

唐念刚,张 勇

(1.武汉邮电科学研究院 湖北 武汉 430070;2.武汉长江通信智联技术有限公司 湖北 武汉430070)

AOP技术在Web系统日志和事物管理中的应用

唐念刚1,张 勇2

(1.武汉邮电科学研究院 湖北 武汉 430070;2.武汉长江通信智联技术有限公司 湖北 武汉430070)

一个完整的软件项目系统分为核心业务关注点与系统级的方面关注点,利用AOP技术可以在Web系统中将项目中的业务逻辑与系统级逻辑进行分离,达到松耦合的目的。文章首先介绍AOP技术的概念与原理,然后结合一个系统实例介绍两种AOP技术分别在日志和事物管理中应用,并证明其可行性。

Web系统;AOP技术;日志管理;事物管理

当前,Web项目系统日趋复杂与庞大,应用也越来越广泛,为目前最重要的基于文档的分布式系统。

日志管理功能模块在系统开发与应用中起着重要作用,系统日志管理可以记录下系统进行的一系列行为信息,包括开发人员在开发过程中调试异常操作的信息数据,用户在系统操作过程中记录下的信息,提高了开发人员的开发效率,也提升了系统的安全性以及可操作性。事务管理模块的作用是对系统数据库操作进行统一的提交或回滚,以便服务器保持数据的完整性,事务管理模块对于大型应用系统,尤其是并发性强的实时系统极为重要,保证系统能够正确顺利的运行。

传统的日志与事务管理模块的设计中代码重复与代码散乱给开发与维护带来了较大的困难。以关注点分离为核心思想的面向切面编程技术(AOP)能很好的解决上述问题,利用AOP技术可以在Web系统中将项目中的业务逻辑与系统级逻辑进行分离,减少重复代码,达到松耦合的目的[1]。

1 AOP技术概念与原理

1.1 AOP基本概念

AOP(Aspect Oriented Programming)即面向切面编程,可以将一些系统相关的工程,独立提取出来,然后通过切面切入到系统,从而避免了在业务逻辑的代码中混入过多的系统相关的代码,比如事务管理、日志处理记录等等,实现了系统松耦合的特点。AOP的几个关键术语分别为:

1)连接点(Joint Point)是程序执行过程中可以切入的点,它可以是对一个函数的调用或者是对象的一个属性。

2)切入点(PointCut)符合切点表达式的连接点,也就是真正切入的地方。

3)通知(Advice)切面在某个连接点执行的操作,它可以分为前置通知(Before Advice)、后置通知(After Advice)、环绕通知(Around Advice)及异常通知(Throwing Advice)等,分别表示在调用或执行方法的不同位置处切入。

4)Aspect(切面)它是切点与通知的结合,切入系统的一个切面,比如事务管理、日记管理等[2]。

1.2 AOP与OOP的区别与联系

OOP(面向对象编程)借助于面向对象的分析、设计思想,开发人员可以将现实领域的实体转换为软件系统中的对象,OOP中一切事物皆对象的思想很好的应用于软件系统中,但是其也有不足之处,OOP允许定义从左到右的关系,但例如日志记录,事务管理,这些代码水平的分布在所有对象的层次中,而与它所分布到的对象的核心功能毫无关系,在OOP设计中,它导致了大量的重复代码的出现,不利于系统的维护。

AOP它是OOP技术的一种补充,它是利用一种称为“横切”的技术,剖开封装对象的内部,并将那些影响了多个类的公共行为封装到一个可以重用的模块,命名为“Aspect”,即切面,意思是说将那些与业务逻辑无关的代码,却为业务模块所共同调用的逻辑代码封装起来,以便减少系统的重复代码,降低模块间的耦合度,有利于系统和的可操作性与可维护性[3]。图1是软件系统的纵向与横向结构图。

图1 系统实现AOP思想图

切面与业务模块是垂直的关系,我们关注的业务逻辑都是从前到后的整个生命周期的过程,而切面是横切于各个业务功能模块之上。

1.3 AOP的工作原理

AOP分为静态AOP与动态AOP,静态AOP是指在预编译阶段采用Aspect技术实现的AOP,它是将切面代码直接编译到java类文件中。动态AOP是指将切面代码进行动态的织入实现的AOP。SpringAOP为动态的AOP,实现技术为JDK提供的动态代理技术和CGLIB(动态字节码增强技术)。两者实现技术不一样,但都是基于代理模式,生成一个代理对象[4]。

2 AspectJ技术在Web系统的应用

2.1 AspectJ技术概述

AspectJ是一个基于java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴后采纳其中的一些思想。AspectJ是一种基于预编译的AOP实现方式,即在编译阶段就对目标类进行修改,得到的class文件已经是被修改过的,生成静态的AOP代理类,支持编译时织入切面,即所谓的CTW 机制[5]。

2.2 基于AspectJ的日志管理的实现

在一个Web系统中,日志管理记录是必不可少的,属于系统级的交叉业务,我们可以将其放在切面中实现。由于日志文件提供的信息更方便程序开发人员查看程序异常,所以我们把系统的异常信息通过日志文件的形式进行输出。下面,我们将结合道路运输管理服务平台系统管理员操作用户模块的实现来说明如何在Web系统应用AspectJ技术实现日志记录的管理。

系统中我们需求是管理员在操作用户模块的时候要记录管理员的操作记录,记录是哪个管理员增加修改删除了内容,从而确定责任,一次需要对每条信息的增删改行为进行日志记录。日志系统需要记录管理员的名字,操作时间,操作信息以及用户数据信息以备后期查询。

2.2.1 配置文件

系统在这里采用基于Annotation的“零配置”方式。首先启用Spring对Aspect切面配置的支持[6]。在配置文件 spring-mybatis.xml(本系统为spring与mybatis整合的系统)中加入如下代码:

2.2.2 定义切面

当启动@AspectJ支持后,接下来定义切面类,添加@AspectJ,spring容器会自动识别该类作为切面类处理,添加@conponent,以便bean容器将该类扫描进去[7]。代码如下:

定义对象yqUserMapper是为了操作数据库,将管理员即将改变数据库用户的数据信息提取出来。

2.2.3 定义切入点

这里采用Annotation标注的通知方法定义切入点的,好处是其他通知可以共用这个切入点,定义pointcut,用于对service层中一某种命名规范开头的方法进行拦截[8,9]。代码如下:

切入点表达式,指定配置com.ycig.istp.yqt.service.impl包下YQUserImpl类中的所有方法作为切入点。关于切入点匹配规则表达式如图2所示。

图2 切入点匹配规则表达式

2.2.4 定义通知

@Before表示目标方法执行前先执行该通知对应的方法,@Around表示目标方法执行前后执行该通知对应的方法,@After表示目标方法执行后执行该通知对应的方法,@AfterThrowing表示目标方法产生异常时执行该通知对应的方法[10,11]。

代码示例如下:

2.2.5 拦截controller

由于本软件系统的业务逻辑主要写在controller层,如要拦截controller层中方法异常时执行异常通知,必须想办法监听controller层方法是否产生异常,切面类代码如下:

3 SpringAOP技术在Web系统中的应用

3.1 SpringAOP技术简介

SpringAop也是AOP技术中一种,属于动态形式AOP,其提供两种方式来生成代理对象,JDKProxy和Cglib,具体那种方式生成有AopProxyFactory根据AdviseSupport对象的配置来决定,JDK代理只支持基于接口的代理,而不支持基于类的代理。默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用CGLIB来生成代理[12-13]。

3.2 基于SpringAOP的事务管理的实现

事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取,事务管理模块对于大型应用系统,尤其是并发性能强的实行系统极为重要,它是确定系统能够正确稳定运行的关键,事务管理就是对一系列的数据库操作进行过统一的提交或回滚操作[14]。

本系统的事务管理是采用基于JDK的动态代理方法方式,引入 spring-aop.jar包,在 springmybatis.xml文件中配置<tx:annotation-driven transaction-manager="transactionManager"/>,因为采用的是JDK动态代理,所以@Transactional注解放在service层实现类与接口上都可以,一般放在实现类上[15],代理类实例代码如下:

这样业务层被@Transactional注解过的类或方法进行数据库操作时都将调用数据库的事务机制。

采用CGLIB动态代理技术实现系统事务管理功能的配置如下:

首先在 springmvc.xml文件中配置<aop:aspectjautoproxy proxy-target-class="true"/>

代码,即将代理权由JDK代理交给CGLIB代理,再引用cglib的jar包即可,在基于CGLIB代理的AOP中@Transactional注解要写在具体类或类中方法之上,Spring使用CGLIB动态代理,而内部通过Cglib2AopProxy实现代理,通过DynamicAdvisedInterceptor进行拦截:

4 结束语

面向切面编程方法广泛应用于具有横切性质的系统级服务,很好的解决了横切关注点问题以及相关的设计难题,实现了松耦合的目的。通过AOP框架技术来实现调用方法时加入切面,在AOP框架中可以方便的使用预定义切入点来定义被调用的类和方法。在以后的内容系统管理等各领域中,AOP技术会有更多的应用。

[1]魏文清,石亮红,武宝珠.用AOP技术实现Web系统中的日志管理[J].江西科学,2010,28(4):528-530.

[2]李健,田立锋,郭瑞.java SSH框架在java Web中的应用[J].学术探讨应用技术与研究,2016,23(3):45-47.

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

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

[5]刘旭斌,朱国斌,关培超,等.AOP在地理信息服务平台日志系统中的应用[J].地理空间信息,2014,12(4:)27-33.

[6]彭雪昶,吴海,张淼.面向切面方法实现日志管理的研究与设计[J].数据库与信息管理,2014,24(44):101-103.

[7]多结仁欠.SSH框架技术在文件系统中的应用研究[J].西藏大学现代教育技术中心,2011,34(31):56-59.

[8]钱慎一,付中举,林青.AOP技术在数据交换与共享系统中的应用[J].郑州轻工业学院学报,2012,27(6):14-16.

[9]王振智,王开义,喻钢.AOP技术在农资信息管理平台中的应用[J].农机化研究,2010,43(6):153-157.

[10]王艳清,陈红.基于SSM框架的只能Web系统研发设计[J].计算机工程与设计,2012,33(12):4752-4757.

[11]Breivold H.A systematic review of software architecture evolution research [J].Infomation and Software Technolo-gy,2012:16-40.

[12]孟若.基于AOP的Web服务演化方法[D].武汉:武汉工程大学,2015.

[13]陈宁,李星.基于AOP架构的业务约束检测[J].计算机工程与应用,2012,48(22):74-78.

[14]刘敏,陈宁,康迪,等.基于JAVA动态代理的AOP实现机制[J].科研发展,2014,22(13):65.

[15]王添财.基于Java EE的在线考试系统的设计与实现[D].广州:华南理工大学,2014.

Log and transaction management in Web system based on Aspect-Oriented Programming

TANG Nian-gang1,ZHANG Yong2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430070,China;2.The Wuhan Yangtze Communications Technology Co.Ltd,Wuhan 430070,China)

A complete software project system is divided into core business concerns and system level aspects of concern,Using AOP technology can separate the business logic and system level logic in the Web system,To achieve the purpose of loose coupling.This paper firstly introduces the concept and principle of AOP technology,and then combined with a system example to introduce two kinds of AOP technology in the log management and transaction management of the application,and finally prove its feasibility.

Web system; AOP technology; log management; transaction management

TN01

A

1674-6236(2017)16-0042-04

2016-07-20稿件编号:201607144

唐念刚(1991—),男,湖南永州人,硕士研究生。研究方向:通信与信息系统,软件设计。

猜你喜欢

事务管理切入点日志
一名老党员的工作日志
扶贫日志
游学日志
慢病防控是深化医改的切入点
找准切入点 扎实推进改革
新闻记者践行“走转改”的三个切入点
“见怪要怪”:舆论监督报道的切入点
综合事务管理
社会事务管理
经济事务管理