最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringAOP切點(diǎn)函數(shù)實(shí)現(xiàn)原理詳解

 更新時(shí)間:2020年05月11日 10:31:57   作者:曾經(jīng)那個(gè)少年  
這篇文章主要介紹了SpringAOP切點(diǎn)函數(shù)實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一:在函數(shù)入?yún)⒅惺褂猛ㄅ浞?/strong>

@AspectJ支持3種通配符

* :匹配任意字符,但它只能匹配上下文中的一個(gè)元素.

.. :匹配任意字符,可以匹配上下文中多個(gè)元素,但在表示類時(shí),必須和*聯(lián)合使用,而在表示入?yún)r(shí)則單獨(dú)使用

+ :表示按類型匹配指定類的所有類,必須跟在類名后面,如com.smart.Car+ ;繼承或擴(kuò)展指定類的所有類,同時(shí)還包括指定類本身.

@AspectJ函數(shù)按其是否支持通配符及支持的程度,可以分為以下3類.

1):支持所有的通配符:execution(),within()

2):僅支持“+”通配符:args(),this(),target()

3):不支持通配符:@args(),within(),target();@annotation()

此外,args(),this(),target(),@args(),@within(),@target()和@annotation()這7個(gè)函數(shù)除了可以指定類名外,也可以指定變量名,并將目標(biāo)對象中的變量綁定到增強(qiáng)的方法中.

二:切點(diǎn)函數(shù)詳解

[1]:@annotation()

@annotation()表示標(biāo)注了某個(gè)注解的所有方法.

eg:

package com.springboot.test;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class TestAspect {
  @AfterReturning("@annotation(com.springboot.anno.NeedTest)")
  public void needTestFun() {
    System.out.println("needTestFun() executed!");
  }
}

[2]:execution()

execution()是最常用的切點(diǎn)函數(shù),其語法如下:

execution(<修飾符模式>?<返回類型模式><方法名模式>(<參數(shù)模式>) <異常模式>?)

除了返回類型模式,方法名模式,參數(shù)模式外,其他項(xiàng)都是可選的.

  (1):通過方法簽名定義切點(diǎn)

  execution(public * *(..)):匹配所有目標(biāo)類的public方法,第一個(gè)*代表返回類型,第二個(gè)*代表方法名,而..代表任意入?yún)⒌姆椒?

  execution(* *To(..)):匹配所有以To為后綴的方法,第一個(gè)*代表返回類型,而*To代表任意以To為后綴的方法.

  (2):通過類定義切點(diǎn)

  execution(* com.springboot.Waiter.*(..)):匹配Waiter接口的所有方法,第一個(gè)*代表返回任意類型;com.springboot.Waiter.*(..)代表Waiter接口的所有方法,

  (3):通過類包定義切點(diǎn)

  在類名模式串中,“.*”表示包下所有的類,而“..*”表示包,子孫包下的所有類.

  execution(* com.smart.*(..)):匹配com.smart包下的所有類的所有方法.

  execution(* com.smart..*(..)):匹配com.smart包.子孫包下所有的類的所有方法.

  execution(* com..*.*Dao.find*(..)):匹配包名前綴為com的任何包下類名后綴為Dao的方法,方法名必須以find為前綴.如:com.smart.UserDao#findByUserId(),   com.smart.dao.ForumDao#findById()等.

  (4):通過方法入?yún)⒍x切點(diǎn):

  切點(diǎn)表達(dá)式中的方法入?yún)⒉糠直容^復(fù)雜,可以使用“*”,“..”通配符.其中“*”表示任意類型的參數(shù);而“..”表示任意類型的參數(shù)且參數(shù)個(gè)數(shù)不限.

  execution(* joke(String,int)):匹配joke(String str,int d)方法.

  execution(* joke(String,*):匹配目標(biāo)類中的joke(),但該方法的第一個(gè)入?yún)镾tring類型,第二個(gè)入?yún)⒖梢允侨我忸愋?

  execution(* joke(String,..)):匹配目標(biāo)類中的joke(),該方法的第一個(gè)入?yún)镾tring類型,后面可以有任意個(gè)入?yún)?且入?yún)㈩愋筒皇芟拗?

  execution(* joke(Object+)):匹配目標(biāo)類中的joke(),方法擁有一個(gè)入?yún)?且入?yún)⑹荗bject類型或該類的子類.

[3]:args()和@args()

args():該函數(shù)接收一個(gè)類名,表示目標(biāo)類方法入?yún)ο笫侵付?包含字類)時(shí),切點(diǎn)匹配

  1):args(com.smart.Waiter)表示運(yùn)行時(shí)入?yún)⑹荳aiter類型的方法, 其等價(jià)于execution(* *(com.smart.Waiter+))當(dāng)然也等價(jià)于args(com.smart.Waiter+).

  2):@args() 太啰嗦,不打字了...

[4]:within()

通過類匹配模式串聲明切點(diǎn),within()函數(shù)定義的連接點(diǎn)是針對目標(biāo)類而言的,而非針對運(yùn)行期對象的類型而言,這一點(diǎn)和execution()是相同的.但和execution()函數(shù)不同的是,within()所指定的連接點(diǎn)的最小范圍只能是類,二execution()所指定的連接點(diǎn)可以大到包,小到方法入?yún)?所以從某種意義上說,execution()函數(shù)的功能涵蓋了within()函數(shù)的功能.within()函數(shù)語法如下:

within(<類匹配模式>)

  •   within(com.smart.NativeWaiter): 匹配目標(biāo)類NativeWaiter的所有方法.
  •   within(com.smart.*):  匹配com.smart包中的所有類,但不包括子孫包,所以com.smart.service包中類的方法不匹配這個(gè)切點(diǎn)
  •   within(co.smart..*):  匹配com.smart包及子孫包中的類,所以com.smart.service,com.smart.dao,com.smart.service.forum等包中的所有類都匹配這個(gè)切點(diǎn).

[5]@within() ,@target()

[6]target(),this()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換

    Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換

    這篇文章主要介紹了Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換,Java的數(shù)據(jù)類型主要分為兩類,基本數(shù)據(jù)類型、引用數(shù)據(jù)類型,下文詳細(xì)介紹,感興趣的朋友可以參考一下
    2022-07-07
  • 解決idea每次打開新的項(xiàng)目都需要重新配置maven問題

    解決idea每次打開新的項(xiàng)目都需要重新配置maven問題

    這篇文章主要介紹了解決idea每次打開新的項(xiàng)目都需要重新配置maven問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解java.lang.NumberFormatException錯(cuò)誤及解決辦法

    詳解java.lang.NumberFormatException錯(cuò)誤及解決辦法

    這篇文章主要介紹了詳解java.lang.NumberFormatException錯(cuò)誤及解決辦法,本文詳解的介紹了錯(cuò)誤的解決方法,感興趣的可以一起來了解一下
    2020-05-05
  • Java多線程定時(shí)器Timer原理及實(shí)現(xiàn)

    Java多線程定時(shí)器Timer原理及實(shí)現(xiàn)

    這篇文章主要介紹了Java多線程定時(shí)器Timer原理及實(shí)現(xiàn),涉及Timer的schedule的使用,定時(shí)器Timer的schedule等相關(guān)內(nèi)容以及代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot整合Shiro框架,實(shí)現(xiàn)用戶權(quán)限管理

    SpringBoot整合Shiro框架,實(shí)現(xiàn)用戶權(quán)限管理

    Apache Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會話管理。作為一款安全框架Shiro的設(shè)計(jì)相當(dāng)巧妙。Shiro的應(yīng)用不依賴任何容器,它不僅可以在JavaEE下使用,還可以應(yīng)用在JavaSE環(huán)境中。
    2021-06-06
  • java web如何解決瞬間高并發(fā)

    java web如何解決瞬間高并發(fā)

    這篇文章主要為大家詳細(xì)介紹了java web解決瞬間高并發(fā)的策略,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • java仿windows記事本小程序

    java仿windows記事本小程序

    這篇文章主要為大家詳細(xì)介紹了java仿windows記事本小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • SpringBoot集成Redisson實(shí)現(xiàn)延遲隊(duì)列的場景分析

    SpringBoot集成Redisson實(shí)現(xiàn)延遲隊(duì)列的場景分析

    這篇文章主要介紹了SpringBoot集成Redisson實(shí)現(xiàn)延遲隊(duì)列,本文通過場景分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介)

    Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介)

    DataSource是作為DriverManager的替代品而推出的,DataSource 對象是獲取連接的首選方法,這篇文章主要介紹了Data Source與數(shù)據(jù)庫連接池簡介(JDBC簡介),需要的朋友可以參考下
    2022-11-11
  • Java對敏感數(shù)據(jù)進(jìn)行加密的方法詳解

    Java對敏感數(shù)據(jù)進(jìn)行加密的方法詳解

    敏感數(shù)據(jù)的加密是數(shù)據(jù)安全的重要方面,尤其是對于手機(jī)號和身份證號這類個(gè)人信息,本文主要為大家介紹了Java對敏感數(shù)據(jù)進(jìn)行加密的相關(guān)方法,希望對大家有所幫助
    2024-03-03

最新評論

枣庄市| 昭觉县| 开平市| 江孜县| 准格尔旗| 铜鼓县| 墨江| 馆陶县| 博爱县| 泸州市| 华安县| 巴林右旗| 沙田区| 资兴市| 虞城县| 邢台市| 禄丰县| 勃利县| 德钦县| 静海县| 万年县| 崇义县| 布拖县| 台中市| 拜泉县| 信宜市| 香港| 康乐县| 沂源县| 河池市| 靖边县| 翼城县| 宁波市| 增城市| 德保县| 特克斯县| 五河县| 得荣县| 合江县| 晋宁县| 大厂|