基于Annotation的Spring AOP日志处理的设计与实现

基于Annotation的Spring AOP日志处理的设计与实现


2024年4月27日发(作者:)

ValueEngineering

·207·

基于Annotation的SpringAOP日志处理的设计与实现

Annotation-basedSpringAOPDesignandImplementationofLogProcessing

张文胜

ZHANGWen-sheng

(西安欧亚学院信息工程学院,西安710065)

(SchoolofInformationEngineering,Xi'anEurasiaUniversity,Xi'an710065,China)

摘要:

系统维护和错误排查需要程序能自动的输出日志信息,将用户的操作记录下来。而日志本身不太可能是你开发的主程序的

主要任务。如果能将“不可见的”、通用的日志代码注入主程序中,而保证自身业务逻辑的纯洁性,降低代码之间的耦合度,增加程序

的灵活性和可重用性。本文使用SpringAOP的Annotation方式,写一个切面,并且指定切入的范围(切入点),当系统运行后,日志信息

将可以自动输出或记录在指定的文件及数据库中。

Abstract:Systemmaintenanceanderrorstroubleshootingneedtheprogramcanautomaticallyoutputloginformationandrecordthe

user'logit"invisible"andcommon

loggingcodecanberecordedintothemainprogram,itwillguaranteethepurityoftheirbusinesslogic,reducecouplingbetweencode,and

perusesAnnotationofSpringAOPtowriteasection,andspecifiestherangeofcuts

(startingpoint).Whenthesystemisrunning,loginformationwillbeoutputautomaticallyorrecordinthespecifiedfilesanddatabase.

关键词:

面向切面编程(AOP);Annotation;耦合度

Keywords:aspectorientedprogramming(AOP);Annotation;couplingdegree

中图分类号:

TP39

文献标识码:

A

文章编号:

1006-4311(2012)32-0207-03

需配置文件,只需要通过添加“注释代码”来完成,简化了

Spring的开发,容易对方法进行拦截。

常用的AspectJ注解有:①前置通知(@Before):在某

连接点(joinpoint)之前执行的通知,但这个通知不能阻止

连接点前的执行(除非它抛出一个异常)。②后置通知

):当某连接点退出的时候执行的通知(不论是正(@After

常返回还是异常退出)。③返回后通知(@AfterReturning):

在某连接点(joinpoint)正常完成后执行的通知:例如,一

个方法没有抛出任何异常,正常返回。④抛出异常后通知

(@AfterThrowing):方法抛出异常退出时执行的通知。⑤环

绕通知(@Around):包围一个连接点(joinpoint)的通知,如

方法调用。

1.2AOP面向切面编程和实现方式AOP通过提供另

外一种思考程序结构的途经来弥补面向对象编程(OOP)

的不足。在OOP中模块化的关键单元是类(classes),而在

AOP中模块化的单元则是切面。切面能对关注点进行模

块化,例如横切多个类型和对象的事务管理———在AOP

术语中通常称作横切(crosscutting)关注点。

SpringAOP有三种实现方式,除了底层的SpringAOP

Spring2.0以后版本允许用户选择使用更简API方式外,

单、更强大的Schema-based(基于模式XML)方式和

@Aspect-based(注解Annotation)方式来自定义切面。这

两种风格都支持所有类型的通知(advice)和AspectJ的切

入点语言,虽然实际上仍然使用SpringAOP进行织入

(Weaving)。

Annotation方式通过使用注释,程序开发人员可以在

不改变原有逻辑的情况下,在源文件嵌入一些补充的信

息。代码分析工具,开发工具和部署工具可以通过这些补

充信息进行验证或者进行部署。比如希望某个方法的参数

———————————————————————

或者返回值不为空,虽然我们可以在Javadoc中说明,但

基金项目:

西安欧亚学院科研基金项目资助(SKA-10-02)。

测试工具很难根据这些语

作者简介:

张文胜(1967-),男,陕西西安人,工程师/讲师,研究方

是表达同样意思的说法有很多,

言来分析出程序员所期望的前提条件(Pre-condition)和执

向为JavaEE架构的应用和Android程序设计。

0

引言

AOP(AspectOrientedProgramming,向切面编程)是建

立在OOP(ObjectOrientedProgramming,面向对象程序设

计)基础之上的,OOP针对问题领域中以及业务处理过程

中存在的实体及其属性和操作进行抽象和封装,面向对象

的核心概念是纵向结构的,其目的是获得更加清晰高效的

逻辑单元划分;而AOP则是针对业务处理过程中的切面进

行提取,例如,某一个操作(例如日志输出)在各个模块中都

有涉及,这个操作就可以看成“横切”存在于系统当中。在许

多情况下,这些操作都是与业务逻辑相关性不强或者不属

于逻辑操作的必须部分,而面向对象的方法很难对这种情

使程序况做出处理。AOP则将这些操作与业务逻辑分离,

员在编写程序时可以专注于业务逻辑的处理,而利用AOP

将贯穿于各个模块间的横切关注点自动耦合进来

[1]

AOP被定义为一种编程技术,用来在系统中提升业

务的分离,它将服务模块化,使得业务层完全没必要理会

这些服务的存在,比如日志,事务,安全等。

1SpringAOP

Annotation

方式的技术要点

1.1Annotation技术sun公司从J2SE5.0开始提供名

为Annotation(注释)的功能,它被定义为JSR-175规范

[2]

是Java语言中的一种特殊的元数据语法,可以被添加到

Java代码中。类,方法,变量,参数,包都可以被标注。

Annotation是可以被反射的,因为它们被编译器生成嵌入

在编译后文件,并保留在虚拟机中以便在运行时被索引

[3]

注释是以“@注释名”在代码中存在,一般只有一行,也可

以包含有任意的参数。

从Spring2.0以后的版本中,集成了AspectJ注解。

AOP的实现有多种方式,使用Annotation方式的配置,无

·208·

价值工程

Object[]args=s();//获得参数列表

if(<=0){

n("===="+methodName+"方法没有

参数");

}else{

for(inti=0;i<;i++){

n("参数"+(i+1)+":"+args

[i]);

}

}

行后的条件(Post-condition)。而使用注释(Annotation),这

个问题就可以轻而易举的解决了。

2SpringAOP

Annotation

方式的日志处理实现

2.1运行环境配置进行spring-framework的AOP

Annotation方式开发时需要下载AspectJ开发插件,以支

持AspectJ语法。可以在eclipse的官方网站下载aspectj

可以直接双击,进行安装。也可以解压缩其中lib

jar包

[5]

文件夹,lib文件夹中有4个重要的jar包:,

,,,解

压缩后把这4个jar包导入到AOP项目中。此外还需下载

,此包就是AOP联盟定义的一组关于AOP

的公共接口

[6]

,Aspectjjar包需要aopalliancejar包支持。

2.2用户Service接口与实现类

①编写UserService业务接口,声明增删改查方法。

publicinterfaceUserService{

publicvoidaddUser(Stringname,Stringpassword);

publicvoiddelUser(intid);

publicvoidupdateUser(intid);

publicvoidgetUser(intid);

}

②UserService接口的业务实现UserServiceImp,实现

增删改查方法。

publicclassUserServiceImpimplementsUserService{

@Override

publicvoidaddUser(Stringname,Stringpassword){

n("-----添加用户-----");

}

@Override

publicvoiddelUser(intid){

n("-----删除用户-----");

}

@Override

publicvoidupdateUser(intid){

n("-----修改用户-----");

}

@Override

publicvoidgetUser(intid){

n("-----获取用户-----");

}

}

2.3创建切面类LogAspect

@

Aspect//定义切面类

publicclassLogAspect{

//业务逻辑方法切入点

@Pointcut("execution(*add*(..))||(execution(*del*(..)))||(execution

(*get*(..)))||(execution(*update*(..)))")

privatevoidallMethods(){

}

//Advice定义在哪些方法上应用此方法验证

//针对指定的切入点表达式选择前置通知

@Before("allMethods()")

publicvoidlogInfo(JoinPointjp){

StringclassName=s().toString();

//获得方法名

StringmethodName=nature().getName();

n("====================");

//记录日志时间

n(newSimpleDateFormat("HH:mm:ss:SSS")

.format(newGregorianCalendar().getTime()));

n("位于:"+className);

n("调用"+methodName+"方法-开始!");

n("======================");

}

//针对指定的切入点表达式选择后置通知

@After("allMethods()")

publicvoidlogInfoAfter(JoinPointjp){

n("======================");

n(""+nature().getName()+"方法-

结束!");

n("======================");

}

}

Pointcut是指那些方法需要被执行“AOP”,是由

PointcutExpression”来描述的。上述配置针对切入点应用

了前置和后置通知。

配置文件,指定切面作用的

范围。

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:aop="/schema/aop"

xmlns:tx="/schema/tx"

xsi:schemaLocation="/schema/beans

/schema/beans/spring-

/schema/aop

/schema/aop/spring-aop-

">

配置文件中配置LogAspect类及UserService的实现

类UserServiceImp。

2.5运行测试文件

publicclasstestLog{

publicstaticvoidmain(String[]args){

BeanFactoryfactory=new

ClassPathXmlApplicationContext(

"");

UserServiceuser=(UserService)factory.

getBean("user");

r("李明","20");

}

}

日志记录的输出内容如下:

11:09:40:866

位于:rviceImp@14e8cee

调用addUser方法-开始!

参数1:李明

参数2:20

=====================================

----------添加用户----------

=====================================

addUser方法-结束!

=====================================

ValueEngineering

·209·

基于射频识别的小区门禁系统的开发与设计

RFID-basedDevelopmentandDesignofAccessControlSystemofCommunity

孙继敏

SUNJi-min

(吉林省水利水电勘测设计研究院,长春130021)

(JilinProvinceWaterResourcesandHydropowerSurveyandDesignInstitute,Changchun130021,China)

摘要:

小区门禁系统的开发与设计是多门学科的综合,主要是对系统软件的开发,而RFID作为一种无线射频识别技术能够自动

识别目标对象,不仅在一卡通方面,而且在物流方面也得到了广泛地应用。在当前信息化时代,社会越来越复杂,各种现象都随时会出

现,特别是在住宅小区,由于人多,就会引起一些不当的行为发生,为此小区门禁系统是非常重要的。本文拟将重点分析如何在小区门

禁系统的开发与设计中应用射频识别技术。

Abstract:Developmentanddesignofaccesscontrolsystemofcommunityisacombinationofmulti-discipline,mainlyonthe

,asawirelessradio-frequencyidentificationtechnology,canautomaticallyidentifythetargetobject,

soitnotonlyhasbeenwidelyappliedincartoon,urrentinformationage,societybecomesmoreandmore

complex,varietyofphenomenacanoccuratanytime,eofmanypeople,itwillgiverisetosome

improperconduct,peranalyzeshowtoapplyRFIDinthe

developmentanddesignofaccesscontrolsystem.

关键词:

射频识别;RFID;小区门禁系统

Keywords:radiofrequencyidentification;RFID;communityaccesscontrolsystems

中图分类号:

TP39

文献标识码:

A

文章编号:

1006-4311(2012)32-0209-02

0

引言

目前RFID技术正在被尝试使用在各个领域,同样也

RFID为芯片的智能卡已经包括使用在智能化住宅方面,

在该领域有了突破性的应用,这项技术将成为改写下一代

出入口控制系统是住宅小区物业住宅新理念的关键技术。

管理中的重要环节,这不仅是由于当前信息系统的发展,

更主要的是为了小区安全和业主的生命财产安全着想,而

社会的客观需求和主观意愿。

1RFID

技术概述

无线射频识别技术(RFID)是从二十世纪90年代兴

起的一项非接触式自动识别技术。它是利用射频方式进行

非接触双向通信,以达到自动识别目标对象并获取相关数

适应环境能力强、抗干扰强、操作快捷等据,具有精度高、

[1]

许多优点

。RFID技术主要运用电子标签来储存相关的资

料信息,通过无线传输的方式来读取其中的数据,主要被

认为是一种能够有效识别功能信息的工具,它的功能完

备,可以根据不同需求制定不同的软件数据和信息,具有

RFID高度地需求化和可更改性。同传统的条码技术比较,

更具有可取性。它是一种新型的识别软件技术,不管是在

———————————————————————

作者简介:

孙继敏(1972-),男,吉林长春人,本科,高级工程师,研

究方向为低压变配电工程及智能建筑。

何种条件下,都能发挥其有效地识别功能,起到安全保护

地作用。由此,RFID在小区门禁系统中得到广泛的应用是

情理之中,因为它更具有人性化和拟人化,这必将给本身

就高度发展的社会带来更大的市场需求和应用。

2RFID

开放式门禁系统的重要作用及开发要求

2.1RFID开放式门禁系统的重要作用RFID开放式

门禁系统将填补RFID在国内多行业应用的空缺。小区门

禁系统软件的出现,不仅带来了良好的社会环境和小区氛

围,同时也为小区管理提供了更加完备的设备,保安系统

得到了加强。RFID在小区门禁系统中的应用,实现了小区

管理的规范化,系统化,能够有效地识别输入的相关资料,

使小区管理得到了系统的识别,在对小区进行信息化管理

的同时,RFID带来了小区的高度完善地管理和监控。开放

式门禁系统的推出将引发更多的市场需求和市场应用

[2]

2.2RFID开放式门禁系统的开发要求识读部分:开

放式门禁系统。在门禁系统的高度完备的技术中,RFID起

着非常重要的作用,但在这门技术应用中,以下问题是必

①门禁系统的通过要大于80厘米;②由于识须要注意的:

别系统的速度非常快,因此要设置系统的反应识别时间不

③可以区别识别其它的相关标签,并且每秒大于0.2秒;

可以识别的标签数要大于50张。

参考文献:

3

结论

通过对SpringAOP的Annotation方式实现日志输出

的研究,可以看出AOP是对OOP在某些应用场合的补

充,AOP就是分离横切关注点来实现软件的模块之间的

松散耦合,从而提高软件的可维护性和可复用性,而

Annotation(注解)方式的确更加简洁,且由配置优先转为

契约优先。

近年来,Annotation方式越来越受到重视,合理的运用

AOPAnnotation方式,将使软件的开发更加便捷,清晰。

[1]/spring/docs/2.5.x/reference/aop.

html.

[2]/otndocs/jcp/metadata-1.0-prd-

spec-oth-JSpec/.

[3]/wiki/Java_annotation.

[4]SpringFramework开发参考手册.

[5]/aspectj/.

[6]/projects/aopalliance/.


发布者:admin,转转请注明出处:http://www.yc00.com/news/1714158917a2392946.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信