关于前面的aop和这一节的ResultRender的问题
来源:11-10 ResultRender矩阵的实现(上)
![](http://img1.sycdn.imooc.com/user/545850e10001f06002200220-100-100.jpg)
慕标7411662
2022-08-06
老师在这一节测试InternalErrorResultRender时我遇到个问题,就是上一节的ControllerTimeCalculatorAspect切面,当织入点为:
@Aspect(pointcut = "execution(* com.yeah.controller.frontend..*.*(..))")
时,执行完aop的before逻辑之后
@Override
public void before(Class<?> targetClass, Method method, Object[] args) throws Throwable {
log.info("开始计时,执行的类是[{}],执行的方法是[{}],参数是[{}]",
targetClass.getName(), method.getName(), args
);
timestampCache = System.currentTimeMillis();
}
开始执行throwException方法时就一直卡在那,没法进入到InternalErrorResultRender进行渲染
添加了afterThrowing处理逻辑之后
@Override
public void afterThrowing(Class<?> targetClass, Method method, Object[] args, Throwable e) throws Throwable {
long endTime = System.currentTimeMillis();
long costTime = endTime - timestampCache;
log.info("结束计时,执行的类是[{}], 执行的方法是[{}],参数是[{}],异常是[{}]时间为[{}]ms",
targetClass.getName(),method.getName(),args, e, costTime);
}
发现before和afterThrowing的aop逻辑都可以执行:
但是InternalErrorResultRender依旧没有办法渲染出来。从RequestProcessorChain的doRequestProcessorChain方法责任链开始调用的位置(上面那个断点位置)打断点调试,发现最后是可以进入到InternalErrorResultRender渲染器的,但是如果打在下面的那个断点位置,debug后就无法进入到,控制台也会直接返回afterThrowing打印的信息。
并且测试时,在网页监控界面的response位置也始终没有看到有response,请问这是哪里发生冲突了呢?
写回答
1回答
-
翔仔
2022-08-08
同学好,抱歉这几天在外地出差,不方便回复,所以晚了,这块这样描述由于咱们上下文不一致,还是不太能精确定位问题,同学先理解下全链路的执行顺序,然后调试看看自己的这些render的执行顺序是否正确,以及InternalErrorResultRender是否是被在异常处理时用到的
00
相似问题