日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring-AOP

發布時間:2025/4/16 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring-AOP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開始使用Spring的AOP之前我們需要在bean.xml中引入aop約束,并在pom.xml導入依賴

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--........--> </beans> <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency> </dependencies>

一、編寫公共代碼制作成通知

package com.itheima.utils/*** 用于記錄日志的工具類,它里面提供了公共的代碼*/ public class Logger {/*** 用于打印日志:計劃讓其在切入點方法執行之前執行(切入點方法就是業務層方法)*/public void printLog(){System.out.println("Logger類中的pringLog方法開始記錄日志了。。。");} }

二、編寫配置文件

1.把通知類用bean標簽配置起來

<!-- 配置Logger類 --> <bean id="logger" class="com.itheima.utils.Logger"></bean>

2.使用aop:config申明aop配置

<!--配置AOP--> <aop:config><!--配置代碼--> </aop:config>

3.使用aop:aspect配置切面

<!--配置AOP--><aop:config><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"><!--配置通知類型--></aop:aspect></aop:config>

4.使用aop:pointcut配置切入點(要增強的方法)表達式

<!--配置AOP--> <aop:config><aop:pointcut pointcut="execution(* com.itheima.service.impl.*.*(..))" id="pt1"><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"><!--配置通知類型--></aop:aspect> </aop:config>

切入點表達式的寫法:
關鍵字:execution(表達式)
表達式:訪問修飾符 返回值 包名.包名.包名…類名.方法名(參數列表)

標準的表達式寫法:public void com.itheima.service.impl.AccountServiceImpl.saveAccount()
訪問修飾符可以省略:void com.itheima.service.impl.AccountServiceImpl.saveAccount()

返回值可以使用通配符,表示任意返回值
* com.itheima.service.impl.AccountServiceImpl.saveAccount()

包名可以使用通配符,表示任意包。但是有幾級包,就需要寫幾個*.
* *.*.*.*.AccountServiceImpl.saveAccount())

包名可以使用…表示當前包及其子包
* *…AccountServiceImpl.saveAccount()

類名和方法名都可以使用*來實現通配
* *…*.*()

參數列表:

  • 可以直接寫數據類型:
    • 基本類型直接寫名稱:int
    • 引用類型寫包名.類名的方式:java.lang.String
  • 可以使用通配符*表示任意類型,但是必須有參數
  • 可以使用…表示有無參數均可,有參數可以是任意類型
  • 全通配寫法:
    * *…*.*(…)

實際開發中切入點表達式的通常寫法:
切到業務層實現類下的所有方法:* com.itheima.service.impl.*.*(…)

5.使用aop:xxx配置對應的通知類型

<!--配置AOP--> <aop:config><!--務必寫在配置切面之前,這是spring規定好的--><aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"></aop:pointcut><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"> <aop:before method="printLog" pointcut-ref="pt1"></aop:before><!--aop:pointcut和aop:before也可以合為一句,不過在對一個切入點配置多個aop:xxx的時候,分開寫的優勢就體現了,即不用多次寫切入點表達式--><!--<aop:before method="printLog" pointcut="execution(* com.itheima.service.impl.*.*(..))"></aop:before>--></aop:aspect> </aop:config>

aop:xxx:
aop:before
作用:用于配置前置通知

aop:after-returning
作用:用于配置后置通知

aop:after-throwing
作用:配置異常通知

aop:after
配置最終通知

以上這些可以類比java的try-catch執行機制來理解。

三、環繞通知

環繞通知的通知類寫法和上面不同,但是在xml中的配置還是差不多的,使用aop:around配置對應的通知類型。環繞通知可以手動控制增強代碼什么時候執行,而不限于上面的前置、后置。通常情況下around都是單獨使用的,也就是對要增強的方法不用再配置前置、后置之類的通知了。

spring 框架為我們提供了一個接口:ProceedingJoinPoint,它可以作為環繞通知的方法參數。在環繞通知執行時,spring框架會為我們提供該接口的實現類對象,我們直接使用就行。例如對上面的例子進行改寫:

package com.chester.utils;import org.aspectj.lang.ProceedingJoinPoint; /*** 用于記錄日志的工具類,它里面提供了公共的代碼*/ public class Logger {/*** 用于打印日志:計劃讓其在切入點方法執行之前執行(切入點方法就是業務層方法)*/public void printLog(ProcessingJoinPoint pjp){try{System.out.println("Logger類中的pringLog方法開始記錄日志了。。。");pjp.proceed();System.out.println("Logger類中的pringLog方法結束記錄日志了。。。");}catch(Throwable e){System.out.println("運行出錯");e.printStackTrace();}finally{System.out.println("Logger類中的pringLog方法完成記錄日志了。。。");}} }

現在在xml進行配置:

<!-- 配置Logger類 --> <bean id="logger" class="com.chester.utils.Logger"></bean><aop:config><aop:pointcut expression="execution(* com.chester.service.impl.*.*(..))" id="pt1"></aop:pointcut><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"><aop:around method="printLog" pointcut-ref="pt1"></aop:around></aop:aspect> </aop:config>

總結

以上是生活随笔為你收集整理的使用Spring-AOP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。