读书人

跟小弟我学aspectj之八 -控制流cfow,c

发布时间: 2012-06-28 15:20:04 作者: rapoo

跟我学aspectj之八 -----控制流cfow,cfowbelow

一、序言

cflow我认为是aspectj中最难理解的一个概念,至少我是这么认为的。当初刚接触aspectj的时候,可谓是为之颠倒,不只大家是否有相同的感觉。但有一点不可否认的就是:他觉得是aspectj强大功能之一。 他可以做到Spring AOP无法做到的场景。

?

二、控制流

什么叫控制流? 相信很多不理解cflow的同学跟我一样,刚开始也是卡在这里,那么本节,我们就先理清这个概念。先看一段代码:

?


运行一下testCfow().看看是什么结果?

?

跟小弟我学aspectj之八 -控制流cfow,cfowbelow

?

?

尼玛,太坑爹了, StackOverFow了。 哈哈,相信很多同学刚用cfow()的时候也出现这个问题吧?? 其实笔者是故意给你们留的这个陷阱。 那么为什么会溢出勒?其实是这样的:cflowAspect织入了 Bar(). 所以他也算是bar的控制流的一部分, 这样一来,他就自己拦截自己,形成一个死循环,所以就溢出了。恍然一个大悟吧!

?

那我们如何解决这个问题勒?记得上一节讲过的within么? 让我们修改一下代码.

?


?

发现是不是只有bar方法里面的foo()被拦截了? 用Spring AOP你就无法实现这个需求吧?? 是不是突然觉得aspectj真的很强大??但是我还是要说:这只是他强大的表现之一,冰山一角。 但是他绝对是使用频率最高的功能之一。

?

?

四、总结

cfow()获取的是一个控制流程。他很少几乎不单独使用,一般与其他的pointcut 进行 &&运算。若要单独使用,一定要记得用!with()剔除asepct 本身。他是我最喜欢,也是我用的最多的功能,在实际的应用中也用的最广,请好好掌握他。

读书人网 >ASP

热点推荐