Posted on 2009-08-09 00:35
kangaroo 閱讀(309)
評論(0) 編輯 收藏
- 關注點concern:一個關注點可以是一個特定的問題、概念、或是應用程序的興趣區間。這是一個概念上的名詞,就是應用程序必須達到的一個目標。比如前面提到的安全性檢查,事務管理,性能檢測都是系統常見的關注點。
- 橫切關注點crosscutting concern:如果一個關注點的實現代碼(哪怕就一句)散落在很多類或方法之中,我們就稱其為橫切關注點。
- 方面aspect :一個方面是對一個橫切關注點的模塊化,它將原本散落在各處的用于實現這個關注點的代碼規整在一起。如果“關注點”是個概念上的名詞,“方面”就是實在的代碼。
- 連接點join point:程序執行過程中的一點,例如:方法調用method invocation(對方法的調用)、字段訪問field access(讀或寫字段)、異常拋出throws(特定的異常被拋出)
- 增強advice:在特定連接點執行的動作。很多AOP框架都以攔截器interceptor的形式來表現增強。攔截器是一種增強,還有別的形式的增強。所謂攔截器是這樣一個對象,當連接點被調用時,它會收到一個回調消息。增強的例子包括:在方法調用之前,進行安全性的檢查;在執行某個方法的連接點之前開啟事務,在方法執行完畢之后提交或回滾事務。
- 切入點:一組連接點的總稱,用于指定某個增強應該在何時被調用。切入點常用正則表達式或別的通配符來描述。
- 前增強:在連接點調用之前,首先調用增強。
- 后增強:在連接點調用之后,再調用增強。
- 環繞增強:
- 攔截器:很多AOP框架(如Spring和JBoss4,但不包括AspectJ)用它來實現字段和方法的攔截。隨之而來就是在連接點處掛一個攔截器鏈。攔截只是一種AOP的實現策略,不是AOP的核心概念。
- 目標對象:位于攔截器鏈末端的對象實例。顯然這個概念只存在使用攔截器的AOP框架中。
- AOP代理:被增強的對象引用。也就是,AOP增強將在其上執行的這樣一個對象引用。和“攔截器”一樣,“AOP代理”只是對于使用攔截機制的AOP框架,而且是其立身之本。
講了這么多概念,舉個例子,把它們串起來,還是以“AOP學習筆記一”里面的“安全性檢查”為例:
我們把“安全性檢查”作為一個方面,
那么實現安全性檢查的攔截器就是一種增強,
方法businessMethod1,businessMethod2,businessMethod3就是連接點,
但是只有businessMethod1和businessMethod2需要增強,所以需要一個切入點,使其只匹配前兩個方法。
當我們的業務對象和攔截器都配置到spring之后,spring會在運行時織入,并且生成一個AOP代理。
這個AOP代理將是一個JDK動態代理,將在完成安全性檢查之后,調用目標對象。