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条)