介绍
公司项目有需求想要打印方法的入参和返回值, 还要求打印方法的说明。
之前都是在方法的第一行手动打印 log, return 之前再打印返回值, 有多个返回点时需要出现重复代码, 有太多非业务代码显得凌乱。
后来采用 AOP 配置自定义 @Log 注解实现了此功能(主要是用于设置方法说明), 包括方法耗时统计。方法的入参和返回值都采用 fastjson 序列化。现贴出来, 一来给自己做个记录, 二来分享供大家参考指正。
依赖
com.alibaba
fastjson
org.aspectj
aspectjweaver
org.springframework
spring-context
org.slf4j
slf4j-api
注解
package com.ecej.esmart.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by junbaor on 2017/5/12.
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
/**
* log 说明
*
* @return
*/
String value() default "";
/**
* 是否忽略,比如类上面加的有注解,类中某一个方法不想打印可以设置该属性为 true
*
* @return
*/
boolean ignore() default false;
}
实现
package com.ecej.esmart.core.common;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ecej.esmart.core.annotation.Log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import o