calmJava

          StillWaterRunsDeep
          隨筆 - 3, 文章 - 11, 評論 - 0, 引用 - 0
          數據加載中……

          spring_6

          1:
          AOP中的概念:
          Aspect(切面)
          :指橫切性關注點的抽象即為切面,它與類類似,只是兩者關注點不一樣,類是對物體特征的抽象,而切面是橫切性關注點的抽象。
          joinpoint(連接點)
          :所謂連接點是指那些被攔截到的點。在spring中,這些點指的是方法,因為spring只支持方法類型的連接點,實際上joinpoint還可以是field或類構造器。
          Pointcut(切入點)
          :所謂切入點是指我們要對那些joinpoint進行攔截的定義。
          Advice(通知)
          所謂通知是指攔截到joinpoint之后所要做的事情就是通知。通知分為前置通知,后置通知,異常通知,最終通知,環繞通知。
          Target(目標對象)
          :代理的目標對象
          Weave(織入)
          :只講aspects應用到target對象并導致proxy對象創建的過程成為織入。
          Introduction(引入)
          :在不修改類代碼的前提下,Introduction可以再運行期為類動態的添加一些方法或Field

          2:
          加入Spring AOP的支持
          (1):加入jar包,在配置文件中導入aop命名空間,加入<aop:aspectj-autoproxy/>元素
          (2):定義切面類
          (3):在切面類中加入注解:

          : 在類前的注解
          @Aspect

          : 聲明一個切入點
          @Pointcut("execution(* cn.itcast.service..*.*(..))")
          private void anyMethod() {} // 定義切入點的名稱是通過方法的定義來定義的.

          :定義前置通知
          @Before("anyMethod() && args(userName)") 其中 userName 為限制方法的參數必須為String 類型的
          public void doAccessCheck(String userName) {}

          :定義后置通知
          @AfterReturning(pointcut="anyMethod()",returning="revalue")
          public void doReturnCheck(String revalue) {}

          :定義例外通知
          @AfterThrowing(pointcut="anyMethod()",throwing="ex")
          public void doExceptionAction(Exception ex){}

          :定義最終通知
          @After("anyMethod()")
          public void doReleaseAction() {}

          :環繞通知
          @Around("anyMethod()")
          public doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
           return pjp.proceed();
          }

          以上 anyMethod() 為切入點的名稱, 為要應用的切入點
          args 、returning、throwing 為可不定義的可選參數,但被標注方法也要跟著參數的有無而改變方法的參數.
          環繞通知的方法的簽名是死格式

          3:
          把類加入Spring管理:
          在Spring配置文件中加入或用 @Component 組件注解進行標注即可.

          4:
          通知流程圖:
          // 環繞通知
          // 前置通知
          try{
           // 方法執行
           // 后置通知
          }catch(Exception e){
           // 例外通知
          }finally{
           // 最終通知
          }

          5:
          第 19 集

          posted on 2011-01-05 20:59 calmJava 閱讀(200) 評論(0)  編輯  收藏 所屬分類: Spring


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


          網站導航:
           
          主站蜘蛛池模板: 年辖:市辖区| 东阳市| 禄丰县| 岳西县| 老河口市| 肃北| 桃江县| 枣庄市| 当涂县| 兴国县| 莒南县| 丹凤县| 民乐县| 元氏县| 互助| 呼图壁县| 万源市| 博爱县| 东台市| 九龙城区| 仲巴县| 衡南县| 舞阳县| 图片| 磴口县| 高平市| 元江| 威信县| 绥中县| 镇巴县| 如东县| 丹棱县| 海淀区| 睢宁县| 习水县| 会昌县| 绥宁县| 洪湖市| 绵阳市| 玛沁县| 高邑县|