一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring aop execution表達式的用法

spring aop execution表達式的用法

2021-10-15 11:40小賊驢 Java教程

這篇文章主要介紹了spring aop execution表達式的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1.切所有controller下的請求

項目結構

spring aop execution表達式的用法

任意公共方法的執(zhí)行:

?
1
execution(public * (…))

##public可以省略, 第一個 代表方法的任意返回值 第二個參數代表任意包+類+方法 (…)任意參數

配置切入點:

?
1
2
@Pointcut("execution(* com.gcol.qy.web.system.controller..*.*(..))")
public void conPoint(){}

表達式結構解釋如下:

標識符 含義
execution() 表達式的主體
第一個“ * ”符號 表示返回值的類型任意
com.gcol.qy.web.system.controller AOP所切的服務的包名,即,需要進行橫切的業(yè)務類
包名后面的“..” 表示當前包及子包
第二個“*” 表示類名,*即所有類
.*(..) 表示任何方法名,括號表示參數,兩個點表示任何參數類型

如果需要多個切入點可以用 || 符號 如下:

?
1
2
@Pointcut("execution(* com.gcol.qy.web.system.controller..*.*(..)) || execution(* com.gcol.qy.web.system.api..*.*(..))")
public void conPoint(){}

xml 配置

?
1
2
3
4
5
6
7
8
9
<!-- 切換到獲取kpi信息的oracle數據庫 -->
<aop:config>
 <aop:aspect id="dataSourceAspect2" ref="dataSourceInterceptor">
  <aop:pointcut id="daoThree" expression="execution(* com.gcol.qy.web.system.service.kpi.KpiServiceImpl.*(..))
  || execution(*  com.gcol.qy.web.system.service.team.TeamServiceImpl.getFamilyPremiun(..))
  || execution(*  com.gcol.qy.web.system.service.team.TeamServiceImpl.getSalesmanPremium(..))"/>
  <aop:before pointcut-ref="daoThree" method="setDataSourceKpi"/>
 </aop:aspect>
</aop:config>

ref=“dataSourceInterceptor” 執(zhí)行的方法類。

2.Spring中execution語法

語法格式

execution(修飾符 返回類型 切入點類 切入點方法(參數) 異常拋出)

  • 修飾符: 可選,支持通配符,(public/private/protected)
  • 返回類型: 必填,支持通配符,可以使用 * 來匹配所有的返回值類型
  • 切入點類: 可選,支持通配符,指定切入點類
  • 切入點方法: 必填,支持通配符,指定要匹配的方法名,可以使用"*"通配符來匹配所有方法
  • 參數: 若無可不填,指定方法聲明中的形參列表,支持兩個通配符,即*和…

其中*代表一個任意類型的參數,而…代表零個或多個任意類型的參數

  • () 匹配一個不接受任何參數的方法
  • (…) 匹配一個接受任意數量參數的方法,可以是零個或多個
  • (*) 匹配一個接受一個任何類型的參數的方法,只能是一個
  • (*,String) 匹配一個接受兩個參數的方法,其中第一個參數是任意類型,第二個參數必須是String類型

異常拋出: 可選,支持通配符,指定方法聲明拋出的異常

常用實例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- 【1、攔截所有public方法】 -->
<aop:pointcut expression="execution(public * *(..))" id="pt"/> 
 
<!-- 【2、攔截所有save開頭的方法】 -->
<aop:pointcut expression="execution(* save*(..))" id="pt"/>
 
<!-- 【3、攔截指定類的指定方法, 攔截時候一定要定位到方法】 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
 
<!-- 【4、攔截指定類的所有方法】 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.*(..))" id="pt"/>
 
<!-- 【5、攔截指定包,以及其自包下所有類的所有方法】 -->
<aop:pointcut expression="execution(* com..*.*(..))" id="pt"/>
 
<!-- 【6、多條件】 -->
<!-- 或:||   or -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) || execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
 
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) or execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
 
<!-- 且:&&   and -->  <!-- 語法雖然沒錯,但,沒意義 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) && execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
 
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) and execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
 
<!-- 【7、取非值:not  !  不攔截指定的規(guī)則,攔截除此之外的所有類的方法】 -->
<aop:pointcut expression="!execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/> <!-- 注意not前必須有空格 -->
 
<aop:pointcut expression=" not execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_38362455/article/details/81837174

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
主站蜘蛛池模板: 亚洲是图你懂的 | 日本在线视频免费观看 | 黑人巨大vs北条麻妃在线 | 4tube高清性欧美 | 32pao强力打造免费高速高清 | 免费精品一区二区三区在线观看 | 好爽轻点太大了太深了 | 国产一区二区三区在线 | 91嫩草私人成人亚洲影院 | 秋霞午夜视频在线观看 | 日韩欧美推理片免费在线播放 | 男女肉文高h | 99在线视频免费 | 青青草综合网 | 波多野结衣久久国产精品 | 日本一道一区二区免费看 | 亚洲色图亚洲色图 | 亚洲29p| 777奇米影视一区二区三区 | 成年看片免费高清观看 | 亚洲激情网站 | 国产123区在线视频观看 | 俄罗斯一级淫片bbbb | 国产成人毛片 | www免费视频com | 韩国靠逼 | 亚洲天堂一区二区在线观看 | 国产福利一区二区三区四区 | 久久精品中文字幕 | 国产精品合集久久久久青苹果 | 国产一区二区精品久久 | 日本天堂影院在线播放 | 猫扑俩性| 亚洲精品专区 | 九九99九九精彩网站 | 美女被视频 | 1769国产精品免费视频 | 欧美色精品天天在线观看视频 | 韩国男女做性全过程视频 | 四虎影视在线影院在线观看观看 | 国产一区二区播放 |