真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何實(shí)現(xiàn)SpringAOP切點(diǎn)函數(shù)

這篇文章主要為大家展示了如何實(shí)現(xiàn)SpringAOP切點(diǎn)函數(shù),內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、東勝網(wǎng)站維護(hù)、網(wǎng)站推廣。

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

@AspectJ支持3種通配符

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

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

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

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

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

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

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

此外,args(),this(),target(),@args(),@within(),@target()和@annotation()這7個(gè)函數(shù)除了可以指定類(lèi)名外,也可以指定變量名,并將目標(biāo)對(duì)象中的變量綁定到增強(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ù),其語(yǔ)法如下:

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

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

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

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

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

(2):通過(guò)類(lèi)定義切點(diǎn)

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

(3):通過(guò)類(lèi)包定義切點(diǎn)

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

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

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

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

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

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

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

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

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

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

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

args():該函數(shù)接收一個(gè)類(lèi)名,表示目標(biāo)類(lèi)方法入?yún)?duì)象是指定類(lèi)(包含字類(lèi))時(shí),切點(diǎn)匹配

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

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

[4]:within()

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

within(<類(lèi)匹配模式>)

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

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

[6]target(),this()

以上就是關(guān)于如何實(shí)現(xiàn)SpringAOP切點(diǎn)函數(shù)的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。


本文標(biāo)題:如何實(shí)現(xiàn)SpringAOP切點(diǎn)函數(shù)
分享地址:http://weahome.cn/article/jpgdsp.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部