<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # aop的使用 當調用目標方法,跟Aspect中聲明的方法相匹配的時候, AOP框架會自動的為目標方法所在的類創建代理對象。 > ## 注解方式 1. 切面注解配置(在spring beans 配置文件中) ``` <aop:aspectj-autoproxy></aop:aspectj-autoproxy> ``` 2. 在相應的切面類中添加注解 @Aspect @Order 表示配置多個切面之間的優先級問題 。誰的值越小誰的優先級越高 。 @Component 3. 表示通知并設置切點 - **標識通知** @Before 前置通知 (JoinPoint) @After 后置通知 (JoinPoint) @AfterReturning 返回通知 (JoinPoint,Object) @AfterThrowing 異常通知 (JoinPoint,Exception) @Around 環繞通知 (上面標識通知的整合) (ProceedingJoinPoint) **tip**:需要調用方法ProceedingJoinPoint的proceed()方法,寫在語句前為前置通知, 語句后為后置通知,方法返回值為返回通知,該法方法異常處理為異常通知; 例子 ``` @AfterReturning(value="execution(* com.igeek.service.impl.*.*(..))",returning="sb") public void testAfterReturning(JoinPoint joinpoint,Object sb){ //returning值必須與對象名一致 String method = joinpoint.getSignature().getName(); System.out.println("我是返回通知 。 我在目標方法核心業務執行完才會執行 。"+sb); } 第一個* 表示匹配所有訪問修飾符 以及所有返回值類型的方法 第二個* 表示當前包下所有的類 第三個* 表示所有的方法名稱 .. 表示匹配任意多個參數。 * (String,.. )表示匹配第一個參數為String類型的方法,..表示匹配任意數量任意類型的參數。 (String,String) 表示匹配參數為兩個字符串的方法。 ``` 切點可以通過注解@Pointcut方法配置,避免代碼耦合 例子 @Pointcut("execution(* com.igeek.service.impl.*.*(..))") public void declareRepeatJoinPointExpression(){ } - **execution表達式** execution(public * *(..)) 匹配所有類public方法 execution(* com.baidu.dao.*(..)) 匹配指定包下所有類方法,不包含子包 execution(* com.baidu.dao..* (..)) ..* 表示包、子孫包下所有類 execution(* com.baidu.service.UserService.*(..)) 匹配指定類所有方法 execution(* com.baidu.dao.GenericDAO+.*(..)) 匹配實現特定接口所有類方法 execution(* save*(..)) 匹配所有save開頭的方法 - **回調屬性JoinPoint 屬性** `getSignature().getName()`獲得調用函數方法名 ` getArgs()`獲得參數列表,返回數組 > ## XML方式 1. 引入aop:config標簽 2. 配置切點,引入aop:pointcut子標簽 `<aop:pointcut expression="execution(* com.igeek.service.impl.*.*(..))" id="pointcut"/>` 3. 配置切面,引入aop:aspect子標簽 `<aop:aspect ref="checkAspect" order="1"></aop:aspect> `//ref:指向切面的容器bean的id值 4. 在切面引入標識通知,引入切面子標簽aop:before|after... `<aop:before method="checkBeforeLog" pointcut-ref="pointcut"/> //method:觸發的通知方法名稱 pointcut-ref:映射配置切點的id` 例子 <bean id="checkAspect" class="com.igeek.aspect.CheckAspect"></bean> <aop:config> <aop:pointcut expression="execution(* com.igeek.service.impl.*.*(..))" id="pointcut"/> <aop:aspect ref="checkAspect" order="1"> <aop:before method="checkBeforeLog" pointcut-ref="pointcut"/> </aop:aspect> <aop:aspect ref="loggingAspect" order="2"> <aop:before method="beforeLog" pointcut-ref="pointcut"/> </aop:aspect> </aop:config>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看