posts - 8, comments - 13, trackbacks - 0, articles - 43
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          • 關(guān)注點(diǎn)concern:一個(gè)關(guān)注點(diǎn)可以是一個(gè)特定的問(wèn)題、概念、或是應(yīng)用程序的興趣區(qū)間。這是一個(gè)概念上的名詞,就是應(yīng)用程序必須達(dá)到的一個(gè)目標(biāo)。比如前面提到的安全性檢查,事務(wù)管理,性能檢測(cè)都是系統(tǒng)常見(jiàn)的關(guān)注點(diǎn)。
          • 橫切關(guān)注點(diǎn)crosscutting concern:如果一個(gè)關(guān)注點(diǎn)的實(shí)現(xiàn)代碼(哪怕就一句)散落在很多類或方法之中,我們就稱其為橫切關(guān)注點(diǎn)。
          • 方面aspect :一個(gè)方面是對(duì)一個(gè)橫切關(guān)注點(diǎn)的模塊化,它將原本散落在各處的用于實(shí)現(xiàn)這個(gè)關(guān)注點(diǎn)的代碼規(guī)整在一起。如果“關(guān)注點(diǎn)”是個(gè)概念上的名詞,“方面”就是實(shí)在的代碼。
          • 連接點(diǎn)join point:程序執(zhí)行過(guò)程中的一點(diǎn),例如:方法調(diào)用method invocation(對(duì)方法的調(diào)用)、字段訪問(wèn)field access(讀或?qū)懽侄危惓伋鰐hrows(特定的異常被拋出)
          • 增強(qiáng)advice:在特定連接點(diǎn)執(zhí)行的動(dòng)作。很多AOP框架都以攔截器interceptor的形式來(lái)表現(xiàn)增強(qiáng)。攔截器是一種增強(qiáng),還有別的形式的增強(qiáng)。所謂攔截器是這樣一個(gè)對(duì)象,當(dāng)連接點(diǎn)被調(diào)用時(shí),它會(huì)收到一個(gè)回調(diào)消息。增強(qiáng)的例子包括:在方法調(diào)用之前,進(jìn)行安全性的檢查;在執(zhí)行某個(gè)方法的連接點(diǎn)之前開(kāi)啟事務(wù),在方法執(zhí)行完畢之后提交或回滾事務(wù)。
          • 切入點(diǎn):一組連接點(diǎn)的總稱,用于指定某個(gè)增強(qiáng)應(yīng)該在何時(shí)被調(diào)用。切入點(diǎn)常用正則表達(dá)式或別的通配符來(lái)描述。
          • 前增強(qiáng):在連接點(diǎn)調(diào)用之前,首先調(diào)用增強(qiáng)。
          • 后增強(qiáng):在連接點(diǎn)調(diào)用之后,再調(diào)用增強(qiáng)。
          • 環(huán)繞增強(qiáng):   
          • 攔截器:很多AOP框架(如Spring和JBoss4,但不包括AspectJ)用它來(lái)實(shí)現(xiàn)字段和方法的攔截。隨之而來(lái)就是在連接點(diǎn)處掛一個(gè)攔截器鏈。攔截只是一種AOP的實(shí)現(xiàn)策略,不是AOP的核心概念。
          • 目標(biāo)對(duì)象:位于攔截器鏈末端的對(duì)象實(shí)例。顯然這個(gè)概念只存在使用攔截器的AOP框架中。
          • AOP代理:被增強(qiáng)的對(duì)象引用。也就是,AOP增強(qiáng)將在其上執(zhí)行的這樣一個(gè)對(duì)象引用。和“攔截器”一樣,“AOP代理”只是對(duì)于使用攔截機(jī)制的AOP框架,而且是其立身之本。

          講了這么多概念,舉個(gè)例子,把它們串起來(lái),還是以“AOP學(xué)習(xí)筆記一”里面的“安全性檢查”為例:
          我們把“安全性檢查”作為一個(gè)方面
          那么實(shí)現(xiàn)安全性檢查的攔截器就是一種增強(qiáng)
          方法businessMethod1,businessMethod2,businessMethod3就是連接點(diǎn),
          但是只有businessMethod1和businessMethod2需要增強(qiáng),所以需要一個(gè)切入點(diǎn),使其只匹配前兩個(gè)方法。
          當(dāng)我們的業(yè)務(wù)對(duì)象和攔截器都配置到spring之后,spring會(huì)在運(yùn)行時(shí)織入,并且生成一個(gè)AOP代理
          這個(gè)AOP代理將是一個(gè)JDK動(dòng)態(tài)代理,將在完成安全性檢查之后,調(diào)用目標(biāo)對(duì)象


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 封开县| 九江市| 千阳县| 安福县| 巨野县| 正蓝旗| 海城市| 民丰县| 海南省| 承德县| 启东市| 澄城县| 崇明县| 柘城县| 安西县| 巴彦淖尔市| 盐边县| 石嘴山市| 浦北县| 贵德县| 韩城市| 镇雄县| 益阳市| 星子县| 双城市| 商都县| 宝丰县| 永州市| 法库县| 山东| 汝阳县| 喀什市| 德安县| 汶川县| 丹东市| 茌平县| 大埔县| 武定县| 三江| 松滋市| 耒阳市|