Jul 10, 2017 10:38:44 AM
作者:wendal
为什么需要特别写出NutAop的模型呢?
- 了解这个模型,能够更好地理解Aop
基本思路
被改造后
其中使用到的InterceptorChain,可以理解为Servlet里面的FilterChain,它携带着执行原方法时可以获取的信息,如调用对象.调用方法,参数,返回值等整个 InterceptorChain 不到100行,我相信你很快就能看完.懒人的话,只看doChain()/invoke(),你将会豁然开朗.
- 将方法调用的信息,拦截器信息,全部封装到InterceptorChain
- 调用InterceptorChain里面第一个拦截器,并由该拦截器决定是否进行,如果继续,则调用doChain()
- 由于doChain()返回了,堆栈开始往回走,依次通过原本的拦截器, 这时,你可以改变/替换原本的返回值
具体实现
如果在你的方法中打印堆栈,你将看到类似的信息
mixArgsVoid 就是你原本方法
注意
- 切勿自行实现org.nutz.aop.AopCallback接口,并不要使用该接口声明的方法签名
- 虽然org.nutz.aop.MethodInterceptor接口允许你抛出任何异常,但请不要抛出原方法未声明的受检异常