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容器中



          注意:在這種方法定義中,切入點的方法是不被執(zhí)行的,它存在的目的僅僅是為了重用切入點  即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的動態(tài)代理實現AOP

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

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

          4.        

           

          如何強制使用CGLIB實現AOP?

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

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

           

          JDK動態(tài)代理和CGLIB字節(jié)碼生成的區(qū)別?

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

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

           


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


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


          網站導航:
           

          導航

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

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阳山县| 临江市| 磴口县| 青龙| 清丰县| 嵊州市| 灵璧县| 余姚市| 深圳市| 晋城| 福州市| 威远县| 开远市| 阿克陶县| 宝应县| 固始县| 铅山县| 济南市| 乳山市| 天长市| 宝应县| 永嘉县| 金平| 屯门区| 台北市| 洛川县| 潮安县| 宣城市| 海晏县| 灵宝市| 宁陕县| 丹江口市| 公主岭市| 凤翔县| 孝义市| 肥东县| 习水县| 新和县| 凤城市| 京山县| 宜阳县|