spring中的AOP

          Spring 對AOP的支持(采用Annotation的方式)

           

          1.       spring依賴庫

          *SPRING_HOME/dist/spring.jar

          *SPRING_HOME/lib/Jakarta-commons/commons-logging.jar

          *SPRING_HOME/lib/log4j/log4j-1.2.14.jar

          *SPRING_HOME/lib/aspectj/*.jar

          2.       采用Aspect定義切面

          3.       在Aspect定義Pointcut和Advice

          4.       啟用AspectJ對Annotation的支持并且將Aspect類和目標對象配置到Ioc容器中



          注意:在這種方法定義中,切入點的方法是不被執行的,它存在的目的僅僅是為了重用切入點  即Advice中通過方法名引用這個切入點

           

           

          AOP:

               Cross cutting concern

                Aspect

                Advice

                Pointcut

                Joinpoint

                Weave

               Target Object

                Proxy

               Introduction

           

           

          Spring 對AOP的支持(采用配置文件的方式)

           

          1.spring依賴庫

          *SPRING_HOME/dist/spring.jar

          *SPRING_HOME/lib/Jakarta-commons/commons-logging.jar

          *SPRING_HOME/lib/log4j/log4j-1.2.14.jar

          *SPRING_HOME/lib/aspectj/*.jar

           

          2.配置如下:

          <aop:config>

              <aop:aspect id="security" ref="securityHandler">

                  <aop:pointcut id="allAddMethod" expression="execution(* com.lsb.spring.UserManagerImpl.add*(..))"/>

                  <aop:before method="checkSecurity" pointcut-ref="allAddMethod" />

              </aop:aspect>

              </aop:config>

           

           

           

          Spring 對AOP的支持(JoinPoint參數介紹)

           

          Aspect默認情況不用實現接口,但對于目標對象(UserManagerImpl.java),在默認情況下必須實現接口, 如果沒有實現接口必須引入CGLIB庫

           

          我們可以通過Advice中添加一個JoinPoint參數,這個值會由spring自動傳入,從JoinPoint中可以取得參數值、方法名等等

           

           

           

          Spring 對AOP的支持

           

          1.       如果目標對象實現了接口,默認情況下會采用JDK的動態代理實現AOP

          2.       如果目標對象實現了接口,可以強制使用CGLIB實現AOP

          3.       如果目標對象沒有實現了接口,必須采用CGLIB庫,spring會在JDK動態代理和CGLIB之間轉換

          4.        

           

          如何強制使用CGLIB實現AOP?

          *添加CGLIB庫,SPRING_HOME/lib/cglib/*.jar

          *在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

           

          JDK動態代理和CGLIB字節碼生成的區別?

                 *JDK動態代理只能對實現了接口的類生成代理,而不能針對類

                 *CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法,因為是繼承,所以該類最好不要申明成final

           


          posted on 2009-04-06 12:07 胡鵬 閱讀(343) 評論(0)  編輯  收藏 所屬分類: spring


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


          網站導航:
           

          導航

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汕头市| 石台县| 绥棱县| 大兴区| 阆中市| 江北区| 阿尔山市| 布尔津县| 壶关县| 大名县| 寿光市| 景东| 康保县| 沁阳市| 治县。| 县级市| 嘉黎县| 宜兰县| 莎车县| 峨眉山市| 修文县| 蒲江县| 平凉市| 东兴市| 南宁市| 滕州市| 广平县| 大邑县| 屯留县| 烟台市| 深水埗区| 射洪县| 黄骅市| 双峰县| 琼中| 诸暨市| 博白县| 青神县| 叶城县| 玛沁县| 故城县|