利用Spring的AOP处理项目日志

AOP正在成为软件开发的下一个圣杯。使用AOP,你可以将处理aspect的代码注入主程序, 通常主程序的主要目的并不在于处理这些aspect。 AOP可以防止代码混乱。 为了理解AOP 如何做到这点,考虑一下记日志的工作。日志本身不太可能是你开发的主程序的主要任务。 如果能将“不可见的”、通用的日志代码注入主程序中,那该多好啊。AOP可以帮助你做到。 Spring framework是很有前途的AOP技术。作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java程序中使用它。这意味着开发团队里只需 一人要对付AOP framework,其他人还是象往常一样编程。 AOP是很多直觉难以理解的术语的根源。幸运的是,你只要理解三个概念,就可以编写AOP模块。这三个概念是:advice,pointcut和advisor。 advice是你想向别的程序内部不同的地方注入的代码。pointcut定义了需要注入advice的位置,通常是某个特定的类的一个public方法。advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码。 首先我们要写一个普通类,此类作为日志记录类。 比如 package chen.hui.log public classs MyLog{ //在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示 public void before(){ System.out.println("被拦截方法调用之前调用此方法,输出此语句"); } public void after(){ System.out.println("被拦截方法调用之后调用此方法,输出此语句"); } } 其次我们在写一个类作为被拦截类(Spring的AOP就是拦截这个类里面的方法) package chen.hui.log public class Test{//此类中方法可以写任意多个。我只写一个 public void test(){ Sytem.out.println("测试类的test方法被调用"); } } 最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置 <bean id="testLog"></bean> <!--将日志类注入到bean中。--> <aop:config> <aop:aspect id="b" ref="testLog"><!--调用日志类--> <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的类在调用之前都会被拦截--> <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法--> <aop:after pointcut-ref="log" method="after"/>><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法--> </aop:aspect> </aop:config>

到此处整个程序完成,在MyLog类里面的before和after方法添加日志逻辑代码就可以完成日志的管理。以上是对普通类的管理,如果只想拦截某一个类。只要把倒数第二个 *  改成类名就可以了。

 第二:使用Spring AOP对action做日志管理 如果是想拦截action对action做日志管理,基本和上面差不多,但是要注意。以下几点 首先还是要写一个普通类,不过此类中的方法需要传入参数。 比如 package chen.hui.log import org.aspectj.lang.JoinPoint; public classs MyLog{ //在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示 //此处的JoinPoint类可以获取,action所有的相关配置信息和request等内置对象。 public void before(JoinPoint joinpoint){ joinpoint.getArgs();//此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象 System.out.println("被拦截方法调用之前调用此方法,输出此语句"); } public void after(JoinPoint joinpoint){ System.out.println("被拦截方法调用之后调用此方法,输出此语句"); } } 其次我们在写一个action类作为被拦截类(Spring的AOP就是拦截这个类里面的方法) package chen.hui.log public class LoginAction{//此类中方法可以写任意多个。我只写一个 public void test(){ Sytem.out.println("测试类的test方法被调用"); } } 最后进行配置文件的编写。在Spring的配置文件中我们需要进行几句话的配置 <bean id="testLog"></bean> <!--将日志类注入到bean中。--> <aop:config> <aop:aspect id="b" ref="testLog"><!--调用日志类--> <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的类在调用之前都会被拦截--> <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的before方法--> <aop:after pointcut-ref="log" method="after"/>><!--在log包下面所有的类的所有方法被调用之前都调用MyLog中的after方法--> </aop:aspect> </aop:config>

Words translated by CCJK

146,096,379

Request a call or contact us

  •  

    Call ccjk.support for professional assistance

  •  

    Click Here to leave us a message and be as detailed as possible.

We are Certified

Our Client Satisfaction

rating for previous quarte

4.00

Over 95% of our clients recommend our language services to others


Copyright © CCJK Technologies Co., Ltd. 2000-2017. All rights reserved.
TOP