書山有路勤為徑,學海無涯苦作舟
一. 捕獲對構造函數的調用 使用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的正常繼承規(guī)則的限制下重寫返回對象的類型。 3.編譯器不會檢查指定的Signature是否對應于實際的構造函數。
二. 在執(zhí)行構造函數時捕獲它 使用execution(Signature)切入點,它帶有額外的new關鍵字作為簽名的一部分。使用與構造函數有關的execution(Signature)切入點的語法如下: pointcut <pointcut name>(<any values to be picked up>):execution(<optional modifier> <class>.new<parameter types>));
在用于捕獲構造函數的執(zhí)行時,execution(Signature)切入點具有3個關鍵特征: 1.在執(zhí)行類的構造函數時,具有new關鍵字的execution(Signature)切入點會觸發(fā)連接點。 2.不能在調用類的構造函數之前那一刻觸發(fā)連接點。這會阻止重寫返回的對象。 3.可以使用around()通知來重寫構造函數方法的實現(xiàn),當不能重寫正在構造的對象的類型。
三. 捕獲何時初始化對象 使用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)切入點捕獲連接點發(fā)生在任何超類的初始化之后,以及從構造函數方法返回之前。 3.Signature必須解析成特定類的構造函數,而不是一個簡單的方法。 4.initialization(Signature)切入點提供了編譯時的檢查,用于檢查構造函數是否正在被引用。 5.由于AspectJ編譯器中的編譯器限制,當與around()通知關聯(lián)時,不能使用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)切入點捕獲連接點發(fā)生在進入捕獲構造函數之后,以及調用任何超類構造函數之前。 3.Signature必須解析成一個構造函數。 4.preinitialization(Signature)切入點提供了編譯時的檢查,用于檢查構造函數是否正在被引用。 5.由于AspectJ編譯器中的編譯器限制,當與around()通知關聯(lián)時,不能使用preinitialization(Signature)切入點。
五. 捕獲何時初始化類 使用staticinitialization(TypePattern)寫入點。staticinitialization(TypePattern)寫入點的語法如下: pointcut <pointcout name>(<any values to be picked up>) : staticinitialization(<class>);
staticinitialization(TypePattern)切入點具有兩個關鍵特征: 1.對可供staticinitialization(TypePattern)切入點所選通知使用的環(huán)境有一些限制。沒有父對象觸發(fā)靜態(tài)初始化;因此,沒有this引用。也不涉及實例對象,因此,沒有目標引用。 2.TypePattern可以包含通配符,用于選擇一系列不同的類。
posted on 2008-08-22 10:32 Brian 閱讀(1235) 評論(0) 編輯 收藏 所屬分類: 《AspectJ Cookbook》讀書筆記