TimeStamp.java 自定义注解
import java.lang.annotation.*;
/**
* @author Meng.Liu
* @create 2017-10-30 11:30
**/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface TimeStamp {
/**
* 接口的日志标识
* @return
*/
String identity();
}
TimeStampAspect.java 注解拦截器
import cn.com.flaginfo.platform.umsapp.aop.parse.AnnotationParseUtils;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @author Meng.Liu
* @create 2017-10-30 11:35
**/
@Aspect
@Component
@Profile("pref")
public class TimeStampAspect {
private static final Logger logger = LoggerFactory.getLogger(TimeStampAspect.class);
@Pointcut("@annotation(cn.com.flaginfo.platform.umsapp.aop.TimeStamp)")
public void annotationTimeStamp(){ }
@Around("localService() ")
public Object logTimeStamp(ProceedingJoinPoint pjp) throws Throwable {
String className = pjp.getTarget().getClass().getName();
MethodSignature methodSignature = (MethodSignature)pjp.getSignature();
Method method = methodSignature.getMethod();
String identity = null;
try {
identity = AnnotationParseUtils.timeParse(method);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
identity = StringUtils.isEmpty(identity) ? className + "." + method.getName() : identity;
long start = System.currentTimeMillis();
try {
return pjp.proceed();
} catch (Throwable throwable) {
throw throwable;
}finally {
long take = System.currentTimeMillis() - start;
logger.info("@TimeStamp@ : [{}] took [{}ms].", identity, take);
}
}
}