读书人

转载一篇文章:基于Spring aop 跟JAVA

发布时间: 2013-07-01 12:33:04 作者: rapoo

转载一篇文章:基于Spring aop 和JAVA注解方式添加日志

原文出处:http://luoyu-ds.iteye.com/blog/1845584

?

前几天做项目时,在做系统日志这一块,都是在每个方法里手写代码来添加,觉得很繁琐,考虑到spring有aop的功能,便寻思着用AOP来做这个日志功能。

首先需要传入日志记录的具体操作名称,我们可以用java的注解功能来带入参数,代码如下:

/** * 类的方法描述注解 * @author LuoYu */ @Target(ElementType.METHOD)  @Retention(RetentionPolicy.RUNTIME)  @Documented @Inherited public @interface Log {  /** 要执行的操作类型比如:add操作 **/ public String operationType() default "";  /** 要执行的具体操作比如:【添加仓库】 **/ public String operationName() default "";  }

?

注解类编写好之后,就要考虑spring我切面的问题目了,首先我们要创建一个切点,也就是需要插入的代码块,代码如下:

?

在此我配置的时在方法执行之后插入代码块

Xml代码

    <aop:after pointcut-ref="logPointCut" method="doSystemLog"/>

并且是在所有以add,update,delete开头的方法才执行,其余的方法将不再匹配。

调用方法如下,

?

@Log(operationType="add操作:",operationName="添加仓库房间")  public void addWareHouseRoom(WareHouseRoom wareHouseRoom) throws ServiceException {  try{  this.getWareHouseRoomDao().save(wareHouseRoom);      }catch (Exception e) {  throw new ServiceException(e);      }  }  

是在方法头前添加上面自定义的@Log注解,传入相关日志信息

另外,在LogAspect的doSystemLog方法里的

?

    Object[] param = point.getArgs();?

就是取出所匹配方法传入的参数,我们记录日志所需要的相关参数就是从这个对象里取出来的,并且在该方法下面的代码会检查所匹配的方法是否有注解@log,如果没有,会直接跳出该方法,不做任何处理.

读书人网 >编程

热点推荐