刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。
文章目录
- 前言
- 实操
- 代码
- 揭晓答案
- 补充一点
- 打完收工!
前言
前段时间在使用aop
记录操作日志的时候,今天突发奇想,aop
执行能获取返回结果,那么方法是void
能返回什么?可以猜一猜,我开始以为是Void
类型呢
实操
说干就干,开始测试。
代码
- 切面代码如下:
@Aspect
@Component
public class RecordLogAspect {
@Pointcut("@annotation(RecordLog)")
public void pointcut(){}
@Around("pointcut()")
public void test(ProceedingJoinPoint joinPoint) {
try {
Object proceed = joinPoint.proceed();
System.out.println(proceed);
}catch (Throwable e) {
e.printStackTrace();
}
}
}
- 测试方法:
@RecordLog
public void test(String test1) {
System.out.println(test1);
}
揭晓答案
结果是
null
。
补充一点
在使用环绕通知的时候,我们必须要使用一个
ProceedingJoinPoint
中proceed
来执行具体的方法,但是这个方法实际是有重载方法的,这个有参和无参执行的区别你们知道是什么么?
答案揭晓:无参方法执行的时候,其实是就是按照执行方法传入的参数进行执行,执行的时候传入的是什么,这里就按照什么执行,不改变参数。当然有参的方法执行的时候,参数可以获取,当然就可以修改了。像我在使用的时候需要判定第一个参数,来决定使用哪个database
(多数据源选择),就需要使用有参的方法执行。具体参考我之前的博客。Spring Boot记录操作日志