《AspectJ Cookbook》讀書筆記七: 捕獲類和對象構造上的連接點
一. 捕獲對構造函數的調用
使用Call(Signature)寫入點,它帶有額外的new關鍵字作為簽名的一部分。使用與構造函數有關的call(Signature)切入點的語法如下:
pointcut <pointcut name>(<any values to be picked up>): call(<optional modifier> <class>.new(<parameter types>));
在用于捕獲對構造函數的調用時,call(Signature)切入點具有3個關鍵特征:
1.在把一個類實例化成一個對象時,具有new關鍵字的call(Signature)切入點會捕獲連接點。
2.通過使用around()形式的通知,call(Signature)寫入點可以在Java的正常繼承規則的限制下重寫返回對象的類型。
3.編譯器不會檢查指定的Signature是否對應于實際的構造函數。
























二. 在執行構造函數時捕獲它
使用execution(Signature)切入點,它帶有額外的new關鍵字作為簽名的一部分。使用與構造函數有關的execution(Signature)切入點的語法如下:
pointcut <pointcut name>(<any values to be picked up>):execution(<optional modifier> <class>.new<parameter types>));
在用于捕獲構造函數的執行時,execution(Signature)切入點具有3個關鍵特征:
1.在執行類的構造函數時,具有new關鍵字的execution(Signature)切入點會觸發連接點。
2.不能在調用類的構造函數之前那一刻觸發連接點。這會阻止重寫返回的對象。
3.可以使用around()通知來重寫構造函數方法的實現,當不能重寫正在構造的對象的類型。

























三. 捕獲何時初始化對象
使用initialization(Signature)切入點。initialization(Signature)切入點的語法如下:
pointcut <pointcut name>(<any values to be picked up>):initialization(<optional modifier> <class>.new<parameter types>));
initialization(Signature)切入點具有5個關鍵特征:
1.initialization(Signature)切入點必須包含new關鍵字。
2.initialization(Signature)切入點捕獲連接點發生在任何超類的初始化之后,以及從構造函數方法返回之前。
3.Signature必須解析成特定類的構造函數,而不是一個簡單的方法。
4.initialization(Signature)切入點提供了編譯時的檢查,用于檢查構造函數是否正在被引用。
5.由于AspectJ編譯器中的編譯器限制,當與around()通知關聯時,不能使用initialization(Signature)切入點。



























四. 捕獲何時將要初始化一個對象
使用preinitialization(Signature)切入點。preinitialization(Signature)切入點的語法如下:
pointcut <pointcut name>(<any values to be picked up>):preinitialization(<optional modifier> <class>.new<parameter types>));
preinitialization(Signature)切入點具有5個關鍵特征:
1.preinitialization(Signature)切入點必須包含new關鍵字。
2.preinitialization(Signature)切入點捕獲連接點發生在進入捕獲構造函數之后,以及調用任何超類構造函數之前。
3.Signature必須解析成一個構造函數。
4.preinitialization(Signature)切入點提供了編譯時的檢查,用于檢查構造函數是否正在被引用。
5.由于AspectJ編譯器中的編譯器限制,當與around()通知關聯時,不能使用preinitialization(Signature)切入點。


























五. 捕獲何時初始化類
使用staticinitialization(TypePattern)寫入點。staticinitialization(TypePattern)寫入點的語法如下:
pointcut <pointcout name>(<any values to be picked up>) : staticinitialization(<class>);
staticinitialization(TypePattern)切入點具有兩個關鍵特征:
1.對可供staticinitialization(TypePattern)切入點所選通知使用的環境有一些限制。沒有父對象觸發靜態初始化;因此,沒有this引用。也不涉及實例對象,因此,沒有目標引用。
2.TypePattern可以包含通配符,用于選擇一系列不同的類。























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