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

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringAOP的Aspectj方式*

發布時間:2023/12/3 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringAOP的Aspectj方式* 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringAOP的Aspectj介紹

問題:

目前我們已經能夠使用SpringAOP的SchemaBased方式來實現功能擴展。在使用SchemaBased方式實現功能擴展時,發現一個擴展代碼就需要聲明對應的實現了指定的接口的類,這樣造成代碼的結構體系過于繁雜。一個通知一個類。

解決:

在一個類中聲明所有的通知方法。這樣又會造成Spring容器無法區分該類中的方法那些是前置,那些是后置,那些是環繞,那些是異常了,怎么辦?在配置文件中的切面配置中,指明哪些方法是前置,哪些是后置即可。

實現:

SpringAOP的AspectJ方式
① 創建一個web項目并導入AOP的相關jar包
② 在src下聲明mvc的包結構
③在src下創建并配置applicationcontext.xml
a. 切點的bean
b.擴展類的bean
c. 配置切面 聲明切點 聲明前置通知 聲明后置通知 聲明環繞通知 聲明異常通知
④ 獲取Spring容器中的擴展對象完成功能操作。

代碼實現
通知類:

applicationcontext.xml

Acspectj和SchemaBased的異同

  • 相同點:
  • 在不修改源碼的情況下都能實現功能的擴展。

  • 不同點:
  • (1) SchemaBased方式基于接口來區別前置和后置和環繞和異常通知的,而AspectJ方式是在配置文件中使用標簽來區分。

    (2) AspectJ方式在配置中的配置方式發現其切點的聲明以及對應的通知組裝中,切點只在Aop:aspect標簽下有效。而SchemaBased方式聲明的切點在全局有效.SchemaBased的切點的通用性比AspectJ方式要好。

    (3) AspectJ方式擴展涉及參數的流程:

    ① 切點方法中聲明形參完成數據處理

    ② 修改通知方法聲明形參接收對應的實參

    ③ 修改配置文件中的切點聲明,切點中的方法上聲明對應的參數類型。同時還要聲明參數的形參名

    ④ 在通知的配置上聲明參數名


    (4) 在SchemaBased方式涉及形參的流程:

    ① 在切點方法上聲明形參完成功能處理

    ② 在配置文件中修改切點的路徑為帶有參數的切點

    ③ 直接在通知方法中的形參中的Object[]中獲取參數使 用即可

    總結:不涉及到參數問題使用AspectJ方式完成功能擴展比較方便,但是涉及到參數后使用SchemaBased方式比較方便。

    SpringAOP的切點的聲明格式

    ① 切點是某包某類的無參數的方法:
    示例:
    execution(* com.bjsxt.service.impl.Student.test())
    ② 切點是某包某類帶有參數的方法
    示例:
    execution(* com.bjsxt.service.impl.Student.test(String,int))
    ③ 切點是某包某類的某個同名的所有方法
    示例:… 表示任意個數任意類型的參數
    execution(* com.bjsxt.service.impl.Student.test(…))
    ④ 切點是某包下的某類的所有方法
    示例:表示任意的類名,方法名,包名
    execution( com.bjsxt.service.impl.Student.(…))
    ⑤ 切點是某包下的所有類的所有方法
    示例: 表示任意的類名,方法名,包名
    execution(* com.bjsxt.service.impl..(…))

    總結

    以上是生活随笔為你收集整理的SpringAOP的Aspectj方式*的全部內容,希望文章能夠幫你解決所遇到的問題。

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