《AspectJ Cookbook》讀書筆記十: 捕獲基于控制流程的連接點(diǎn)
本章中描述的切入點(diǎn)支持捕獲另一個(gè)初始連接點(diǎn)作用域或環(huán)境內(nèi)的所有連接點(diǎn)。每個(gè)連接點(diǎn)在程序的控制流程中都有一個(gè)具體位置,這為通過這里描述的切入點(diǎn)聲明捕獲的連接點(diǎn)提供了環(huán)境。
一. 捕獲通過初始連接點(diǎn)開始的程序控制流程內(nèi)的所有連接點(diǎn)
使用cflow(Pointcut)切入點(diǎn)。cflow(Pointcut)切入點(diǎn)的語法如下:
pointcut <pointcut name>(<any values to be picked up>) : cflow(<pointcut>);
cflow(Pointcut)切入點(diǎn)具有3個(gè)關(guān)鍵特征:
1.cflow(Pointcut)切入點(diǎn)捕獲在初始特定的連接點(diǎn)環(huán)境內(nèi)遇到的所有連接點(diǎn),這個(gè)初始連接點(diǎn)是通過另一個(gè)切入點(diǎn)選擇的。
2.捕獲的連接點(diǎn)包括初始連接點(diǎn)。
3.作用域是cflow(pointcut)切入點(diǎn)中重要的鑒別器。這個(gè)切入點(diǎn)將捕獲通過切入點(diǎn)參數(shù)捕獲的連接點(diǎn)的控制流程內(nèi)的所有連接點(diǎn)。




































值得更詳細(xì)研究cflow(Pointcut)做什么。這個(gè)特殊的切入點(diǎn)引入了連接點(diǎn)環(huán)境的概念。它是指每個(gè)連接點(diǎn)具有一個(gè)作用域,在這個(gè)用途域內(nèi),它被看成是執(zhí)行程序的控制流程的一部分。
在這個(gè)控制流程內(nèi),任何遇到的連接點(diǎn)都會(huì)觸發(fā)cflow(Pointcut)切入點(diǎn),并調(diào)用任何關(guān)聯(lián)的通知。當(dāng)初始連接點(diǎn)觸發(fā)指定的切入點(diǎn)參數(shù)時(shí),cflow(Pointcut)切入點(diǎn)會(huì)起作用,并觸發(fā)其關(guān)聯(lián)的通知。然后,將為在初始連接點(diǎn)環(huán)境內(nèi)的控制流程中遇到的每個(gè)連接點(diǎn)調(diào)用與cflow(Pointcut)關(guān)聯(lián)的通知。最后,捕獲的連接點(diǎn)集合包括初始連接點(diǎn)本身,這就是這個(gè)切入點(diǎn)與cflowbelow(Pointcut)切入點(diǎn)之間的主要區(qū)別。
在cflow(Pointcut)的當(dāng)前實(shí)現(xiàn)中,在使用它時(shí),其實(shí)現(xiàn)方式會(huì)引入大量的系統(tǒng)開銷。在可能的地方,并且連接點(diǎn)重用不受影響時(shí),可以考慮優(yōu)先使用withincode(Signature)切入點(diǎn)。
二.捕獲程序控制流程內(nèi)的所有連接點(diǎn),不包括初始連接點(diǎn)
使用cflowbelow(Pointcut)切入點(diǎn)。cflowbelow(Pointcut)切入點(diǎn)的語法如下:
pointcut <pointcut name>(<any values to be picked up>) : cflowbelow(<pointcut>);





































這里和第一部分介紹的內(nèi)容有點(diǎn)區(qū)別;其區(qū)別是實(shí)際捕獲的連接點(diǎn)數(shù)量。cflow(Pointcut)切入點(diǎn)會(huì)觸發(fā)在初始連接點(diǎn)環(huán)境內(nèi)遇到的所有連接點(diǎn)(包括初始連接點(diǎn))上的通知,而cflowbelow(Pointcut)切入點(diǎn)則不包括那個(gè)初始連接點(diǎn)。
posted on 2008-08-25 10:36 Brian 閱讀(422) 評論(0) 編輯 收藏 所屬分類: 《AspectJ Cookbook》讀書筆記