使用AOP拦截方法,在控制台中打印执行的方法名以及时间。但在测试时会发现方法执行了,但是没有数据返回,接下来会贴出代码,解决问题。
首先,新建文件夹来存放AopTime.java
方法,代码如下:
@Configuration
@Aspect
public class AopTime {
private Logger logger = LoggerFactory.getLogger(StudentController.class);
@Around("@within(org.springframework.stereotype.Service)")
public void computeExecutionTime(ProceedingJoinPoint pjd)throws Throwable{
MethodSignature methodSignature = (MethodSignature) pjd.getSignature();
this.logger.info(methodSignature.getName()+"开始时间:"+ new Date());
pjd.proceed();
this.logger.info(methodSignature.getName()+"结束时间:"+ new Date());
}
}
接下来使用postman
或者swagger
测试时会发现没有返回数据,但是能够在控制台中看到方法的执行。
这是因为在上面的AopTime.java
的代码中方法虽然被调用执行了,但是没有返回值,学过java的同学都知道,使用void
是没有返回值的,这时可以使用Object
来返回一个对象(swagger测试数据返回的是json格式)。代码如下
@Configuration
@Aspect
public class AopTime {
private Logger logger = LoggerFactory.getLogger(StudentController.class);
@Around("@within(org.springframework.stereotype.Service)")
public Object computeExecutionTime(ProceedingJoinPoint pjd)throws Throwable{
MethodSignature methodSignature = (MethodSignature) pjd.getSignature();
this.logger.info(methodSignature.getName()+"开始时间:"+ new Date());
Object obj = pjd.proceed();
this.logger.info(methodSignature.getName()+"结束时间:"+ new Date());
return obj;
}
}
这时再来测试便能正常返回数据并且可以打印日志消息了。