書山有路勤為徑,學海無涯苦作舟
一. 定義單件(singleton)方面 通過把issingleton()語句顯示添加到方面聲明中,來顯示建立單件方面實例化策略。
傳統(tǒng)的面向對象單件的主要缺點是:使用單件的每個類都與單件的公共接口緊密耦合。而面向方面的單件沒有這個缺點。
二.在每個實例上定義一個方面 AspectJ提供了perthis(Pointcut)和pertarget(Pointcut)方面實例化策略,他們依據Pointcut定義選擇的類,來聲明應該為每個新的對象實例所實例化的方面。 perthis(Pointcut)聲明和pertarget(Poinitcut)聲明之間的區(qū)別必須涉及:在到達通知的連接點時,將會檢查什么對象。perthis(Pointcut)聲明指定:將為通知觸發(fā)連接點處的this說引用的每個新對象而實例化一個新的方面。pertarget(Pointcut)實例化策略指定:如果新對象是通知觸發(fā)連接點的目標,則為每個這樣的新對象實例化一個新的方面。
在考慮可以通過單個方面通知多個類時,perthis(Pointcut)和pertarget(Pointcut)方面實例化策略聲明上的Pointcut參數提供了一些有趣的問題。以下示例中perthis(Pointcut)方面實例化策略只與executeMyClass()切入點指定的MyClass類的對象相關。
聲明只為executeMyClassFoo()切入點指定的每個新對象實例化AdviseMultipleClasses方面,這隱式排除了其他類的對象。即使聲明了executeAnotherClassFoo()切入點,并且他具有相應的通知,也不會導致把任何方面應用于除了它與executeMyClassFoo()共享的那些類之外的任何類。在示例中,兩個切入點之間沒有共享任何公共類,因此,executeMyClassFoo()切入點及關聯的通知會被忽略,因為這個切入點參與了perthis(Pointcut)實例化策略的定義。
一個方面不能具有針對兩類不同對象的兩種實例化策。為了確保方面的實例化策略與它通知的類的素有對象相關,一種有用的技術是:純粹為了使用方面的實例化策略,聲明一個切入點來結合方面中的所有其他的切入點聲明,如:
三.在每個控制流程上定義一個方面 使用percflow(Pointcut)方面實例化聲明。percflow(Pointcut)語句指示編譯器,它應該為從Pointcut參數指定的連接點集合內進入的每個新控制流程創(chuàng)建方面的一個新實例。
percflow(Pointcut)語句代表最細粒度的方面實例化策略,并且會為特定的代碼段創(chuàng)建最大蘇聯高的不同方面實例。
posted on 2008-08-26 14:37 Brian 閱讀(460) 評論(0) 編輯 收藏 所屬分類: 《AspectJ Cookbook》讀書筆記