转载一篇文章:基于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,如果没有,会直接跳出该方法,不做任何处理.