天天看點

AOP簡介AOP是什麼?

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

AOP是什麼?

  Aspect-oriented programming (AOP) ,從名字上說類似oop Object Oriented Programming。AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面程式設計。而什麼是方面哪?

方面也可以認為是關注點,在一個系統中存在很多關注點,比如記錄日志,授權等。面向對象的趨勢是使系統耦合越來越小,設計模式也是如此。然而,這些關注點是最普通的功能,也許會貫穿系統始終,使系統的開發,尤其是維護帶來很多的問題,到處重複着相同的代碼。

     比如,記錄日志:

     public interface MyBizInterface {

     public void myBizMethod();

}

public class MyBizObject implements MyBizInterface {

     private   Logger logger = Logger.getLogger(getClass().getName());

     public void myBizMethod(){

     try {

         logger.info("start to execute...");

         //do something here

         logger.info("end processing...");  

     } catch (Exception e){

         logger.info("exception happends..."+e.getMessage());

     }    

     }

     上面的代碼很簡單,一個簡單的業務邏輯myBizMethod(),當然我們需要記錄日志,但是這樣商業邏輯的代碼和日志記錄代碼混合在一起,這給日後的維護帶來一定的困難,同時存在大量的代碼重複。

     同樣是方面(關注點),應該有主次輕重之分,比如,上面的例子,顯然業務邏輯比較重要,不過你非說日志記錄重要也行。是以,我們應該把日志記錄代碼(次要)從重要的業務邏輯分離出來。要将這些代碼分離就涉及到一個問題,我們必須知道商業邏輯代碼何時被調用,這樣我們好插入日志記錄代碼。一般來說要截獲一個方法,我們可以采用回調方法或者動态代理。動态代理一般要更加靈活一些,目前多數的AOP Framework也大都采用了動态代理來實作。

     有了AOP,我們就可以攔截主要的業務邏輯,把我們不是特别重要的代碼【注入】到裡面去,AOP防止了代碼變得混亂。(

本文轉自 netcorner 部落格園部落格,原文連結:http://www.cnblogs.com/netcorner/archive/2007/03/09/2912422.html  ,如需轉載請自行聯系原作者

繼續閱讀