jfinal源码此处的疑惑

如下截图中标注的内容,为何会进入这里?

action.getMethod().invoke(target, args)执行这个后,会去执行该方法里面的方法?

这里的原理是怎样?

@波总

image.png

评论区

leomj

2019-01-22 14:30

应该是到 action.getMethod().invoke(target, args) 这段代码执行后就结束的,为什么还会进去

JFinal

2019-01-22 15:43

@leomj 这里用到了 cglib 的功能,拦截器本质上就是在目标方法(targetMethod) 的前后额外增加代码,从而实现 AOP 功能

你所看到的 invoke() 方法首先是将拦截器的代码回调干净,然后就是使用 methodProxy.invokeSuper(target. targs)
其中的 invokeSuper(...) 就是调用 targetMethod,是被 AOP 拦截的目标方法

具体到应用中,methodProxy.invokeSuper(...) 就是调用你的 controller 中的 action 方法