動態橫切是通過切入點和連線點在乙個方面中建立行為的過程,連線點可以在執行時橫向地應用於現有物件。動態橫切通常用於幫助向物件層次中的各種方法新增日誌記錄或身份認證。在很多應用場景中,動態橫切技術基本上代表了aop。
動態橫切技術的核心主要包括join point(連線點),point cut(切入點),advice(通知)和aspect(方面)。在前面,我已經概要地介紹了這些術語分別代表的含義。接下來,我將以乙個具體的例項來進一步闡述它們在aop動態橫切中實現的意義。
考慮乙個電子商務系統,需要對訂單進行新增、刪除等管理操作。毫無疑問,在實際的應用場景中,這些行為應與許可權管理結合,只有獲得授權的使用者方能夠實施這些行為。採用傳統的設計方法,其偽**如下:
public class ordermanager
private arraylist m_orders;
public ordermanager()
m_orders = new arraylist();
public void addorder(order order)
if (permissions.verify(permission.admin))
m_orders.add(order);
public void removeorder(order order)
if (permissions.verify(permission.admin))
m_orders.remove(order);
同樣的,在該電子商務系統中,還需要對商品進行管理,它採用了同樣的授權機制:
public class productmanager
private arraylist m_products;
public productmanager()
m_products = new arraylist();
public void addproduct(product product)
if (permissions.verify(permission.admin))
m_products.add(product);
public void removeproduct(product product)
if (permissions.verify(permission.admin))
m_products.remove(product);
如此以來,在整個電子商務系統中,核心業務包括訂單管理和商品管理,它們都需要相同的許可權管理,如圖2.4所示:
aop2.4.gif
圖2.4 電子商務系統的許可權驗證實現
毫無疑問,利用aop技術,我們可以分離出系統的核心關注點和橫切關注點,從橫向的角度,擷取業務管理行為的內部訊息,以達到織入許可權管理邏輯的目的。當執行addorder()等方法時,系統將驗證使用者的許可權,呼叫橫切關注點邏輯,因此該方法即為aop的join point。對於電子商務系統而言,每個需要許可權驗證的方法都是乙個單獨的join point。由於許可權驗證將在每個方法執行前執行,所以對於這一系列join point,只需要定義乙個point cut。當系統執行到join point處時,將根據定義去查詢對應的point cut,然後執行這個橫切關注點需要實現的邏輯,即advice。而point cut和advice,就組合成了乙個許可權管理aspect。
aop2.5.gif
圖2.5 aop動態橫切的技術實現
由於aspect是乙個封裝的物件,我們可以定義這樣乙個aspect:
private static aspect authorizationaspect
然後在這個aspect中定義point cut,在point cut中,定義了需要擷取上下文訊息的方法,例如:
private pointcut authorizationexecution():
execution(public void ordermanager.addorder(order)) ||
execution(public void ordermanager.deleteorder(order)) ||
execution(public void productmanager.addproduct(product)) ||
execution(public void productmanager.deleteproduct(product));
由於許可權驗證是在訂單管理方法執行之前完成,因此在before advice中,定義許可權檢查:
before(): authorizationexecution()
if !(permissions.verify(permission.admin))
throw new unauthorizedexception();
通過定義了這樣乙個完整的aspect,當系統呼叫ordermanager或productmanager的相關方法時,就觸發了point cut,然後呼叫相應的advice邏輯。如此以來,ordermanager和productmanager模組就與許可權管理模組完全解除了依賴關係,同時也消除了傳統設計中不可避免的許可權判斷的重複**。這對於建立乙個鬆散耦合、可擴充套件的系統軟體是非常有利的。
mysql橫切縱切 橫切還是縱切 都不是問題
1 橫切與縱切的區別 1.橫切傷口 傷口一般開在恥骨聯合上方越3 4厘公尺的地方。不過橫切並不完全,到達腹直肌時會在中線處進行縱剖,之後進入腹腔內。2.縱切傷口 傷口會開在肚臍和恥骨聯合中間的正中線處,傷口長度大約15厘公尺。其實,無論是橫切還是豎切,再次妊娠都最好在3年以後,否則容易造成子宮破裂。...
橫切豎割話需求
軟體架構強調的是整體,而整體性的設計決策必須基於對需求的全面認識 軟體架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。一言以蔽之,全面認識需求,是生產出高質量軟體所必須的 第一項修煉 作為乙個軟體架構師,也不應對所有需求 鬍子眉毛一把抓 而是應全面認識需求 分門別類地將需求梳理清楚。...
橫切豎割話需求
軟體架構強調的是整體,而整體性的設計決策必須基於對需求的全面認識 軟體架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。一言以蔽之,全面認識需求,是生產出高質量軟體所必須的 第一項修煉 作為乙個軟體架構師,也不應對所有需求 鬍子眉毛一把抓 而是應全面認識需求 分門別類地將需求梳理清楚。...