《AspectJ Cookbook》讀書筆記八: 捕獲屬性上的連接點(diǎn)
一. 捕獲何時訪問對象的屬性
使用get(Signature)切入點(diǎn)。get(Signature)切入點(diǎn)的語法如下:
pointcut <pointcut name>(<any values to be picked up>) : get(<optional modifier> <type> <class>.<field>);
get(Signature)具有4個關(guān)鍵特征:
1.get(Signature)切入點(diǎn)會觸發(fā)直接在其中(而不僅僅是在訪問器方法的調(diào)用上)訪問屬性的通知。
2.get(Signature)切入點(diǎn)不能捕獲對靜態(tài)屬性的訪問,盡管從AspectJ的語法角度講以這種方式定義切入點(diǎn)是完全合法的。
3.Signature必須解析成特定類的屬性。
4.Signature可以包含通配符,用于選擇不同屬性上的一系列連接點(diǎn)。























你可能期待類使用static和final關(guān)鍵字定義一個常量屬性,這樣,在訪問這個常量時你就可能使用get(Signature)切入點(diǎn)來捕獲。























二. 捕獲訪問的字段值
使用after returning(<ReturnValue>)形式的通知。它在聲明的returning()部分中帶有一個標(biāo)識符,用于包含訪問過的值。















三. 捕獲何時修改對象的字段
使用set(Signature)切入點(diǎn)。set(Signature)切入點(diǎn)的語法如下:
pointcut <pointcut name>(<any values to be picked up>) : set(<optional modifier> <type> <class>.<field>);
set(Signature)具有4個關(guān)鍵特征:
1.set(Signature)切入點(diǎn)在修改字段時觸發(fā)。
2.set(Signature)切入點(diǎn)不能捕獲對靜態(tài)字段的修改,盡管從AspectJ的語法角度講以這種方式定義切入點(diǎn)是完全合法的。
3.Signature必須解析成特定類的屬性。
4.Signature可以包含通配符,用于選擇不同屬性上的一系列連接點(diǎn)。























四. 在修改字段時捕獲它的值
結(jié)合使用args([Types | Identifiers])切入點(diǎn)和set(Signature)切入點(diǎn),展示字段的新值,該字段被設(shè)置成切入點(diǎn)上的標(biāo)識符,可將其傳遞給相應(yīng)的通知。















posted on 2008-08-22 10:43 Brian 閱讀(1182) 評論(0) 編輯 收藏 所屬分類: 《AspectJ Cookbook》讀書筆記