- 在spring的配置文件中加入
<aop:aspectj-autoproxy/>
- 写面向切面的类
package org.tonny.aop;
import java.util.Date;
import org.apache.log4j.Logger;
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.springframework.stereotype.Component;
@Component("userServiceInterceptor")
@Aspect
public class ServiceInterceptor {
private Logger logger = Logger.getLogger(this.getClass());
private Long time;
private Date startTime;
private Date endTime;
//拦截sevice下面所以public类型的方法
@Pointcut(value = "execution(public * org.tonny.service..*.*(..))")
public void anyMethod() {
}
// @Before(value = "anyMethod()")
public void before() {
System.out.println("前置通知");
startTime = new Date();
}
// @After(value = "anyMethod()")
public void after() {
System.out.println("后置通知");
endTime = new Date();
time = endTime.getTime() - startTime.getTime();
System.out.println(time);
}
@Around(value = "anyMethod()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
String className = pjp.getTarget().getClass().getName();
String methodName = pjp.getSignature().getName();
startTime = new Date();
Object obj = pjp.proceed();
endTime = new Date();
time = endTime.getTime() - startTime.getTime();
String logStr = "Service-" + className + "." + methodName + "()耗时:#" + time + "#ms";
logger.debug(logStr);
System.out.println(logStr);
// System.out.println(logStr);
return obj;
}
}