posts - 8, comments - 13, trackbacks - 0, articles - 43
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          AOP學習筆記二:AOP實現策略

          Posted on 2009-08-08 22:01 kangaroo 閱讀(299) 評論(0)  編輯  收藏
          用于實現AOP技術的主要策略,按照功能由弱到強排列:
          -J2SE動態代理
          -動態字節碼生成
          -java代碼生成
          -使用定制的類加載期
          -語言擴展

          1.J2SE動態代理
          動態代理是一種強大的語言結構,它使我們可以為一個或多個接口“憑空”地創建實現對象,而不需要預先有一個實現類。
          動態代理最大的好處在于:這是一種標準的Java語言特性。除了AOP框架之外不需要第三方庫,也不回受到應用程序的任何影響。
          動態代理的最大局限性在于:它只能針對接口進行代理,不能針對類。一般情況下,這種限制不是壞事,因為AOP主要針對業務對象,而業務對象通常是放在業務接口之后。
          動態代理在java1.4和更高的版本性能表現地相對好,不過,一旦使用動態代理的實習策略,便不可避免地招致反射調用的開銷。

          2.動態字節碼生成
          為了針對Java類提供代理,我們需要動態代理之外的工具,就是動態字節碼生成。應該慶幸,Java的反射和類裝載機制都非常開發,因此實現動態字節碼生成庫并不復雜。
          在這方面,最流行的工具就是CGLIB(Code Generation Library)。在spring中,如果需要針對類(而不是接口)提供代理,就會用到CGLIB。它可以針對制定的類動態生成一個子類,并覆蓋其中的方法,從而實現方法的攔截。CGLIB風格的字節碼增強并應用在Hibernate2.X版本中,并被證明是一種成熟的技術。Hibernate的成功表明,在應用服務器環境下CGLIB沒有給最終用戶帶來任何困擾。
          不過CGLIB有個小問題就是,因為它是通過生成類的子類來實現代理的,所以無法為final方法提供代理。

          3.java代碼生成
          逐漸退出流行。

          4.使用定制的類加載器

          5.語言擴展
          AspectJ就對java進行了擴展,將AOP概念作為一等公民來對待。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宁安市| 南和县| 鹤峰县| 二连浩特市| 望江县| 伊春市| 民权县| 磴口县| 平顶山市| 海淀区| 浦北县| 乌兰浩特市| 大兴区| 论坛| 汾阳市| 西乡县| 泊头市| 乌拉特后旗| 应城市| 江门市| 稻城县| 海淀区| 扎囊县| 嘉义县| 锡林郭勒盟| 东港市| 进贤县| 克山县| 新平| 精河县| 营山县| 永善县| 定边县| 南部县| 巍山| 沙洋县| 洛南县| 土默特左旗| 乌兰察布市| 炎陵县| 西乌珠穆沁旗|