亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringAOP中@Pointcut的用法詳解

 更新時(shí)間:2023年08月02日 09:49:55   作者:未來灬可期  
這篇文章主要介紹了SpringAOP中@Pointcut的用法詳解,Pointcut(切點(diǎn))是面向切面編程中的一個(gè)非常重要的概念,此概念由spring框架定義,Pointcut只是一種篩選規(guī)則,需要的朋友可以參考下

SpringAOP的@Pointcut

格式:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?) 

括號(hào)中各個(gè)pattern分別表示:

  • 修飾符匹配(modifier-pattern?)
  • 返回值匹配(ret-type-pattern)可以為*表示任何返回值,全路徑的類名等
  • 類路徑匹配(declaring-type-pattern?)
  • 方法名匹配(name-pattern)可以指定方法名 或者 代表所有, set 代表以set開頭的所有方法
  • 參數(shù)匹配((param-pattern))可以指定具體的參數(shù)類型,多個(gè)參數(shù)間用“,”隔開,各個(gè)參數(shù)也可以用“”來表示匹配任意類型的參數(shù),如(String)表示匹配一個(gè)String參數(shù)的方法;(,String) 表示匹配有兩個(gè)參數(shù)的方法,第一個(gè)參數(shù)可以是任意類型,而第二個(gè)參數(shù)是String類型;可以用(…)表示零個(gè)或多個(gè)任意參數(shù)
  • 異常類型匹配(throws-pattern?)

其中后面跟著“?”的是可選項(xiàng)

現(xiàn)在來看看幾個(gè)例子:

1)execution(* *(..))  
//表示匹配所有方法  
2)execution(public * com. savage.service.UserService.*(..))  
//表示匹配com.savage.server.UserService中所有的公有方法  
3)execution(* com.savage.server..*.*(..))  
//表示匹配com.savage.server包及其子包下的所有方法

在Spring 2.0中,Pointcut的定義包括兩個(gè)部分:Pointcut表示式(expression)和Pointcut簽名(signature)

//Pointcut表示式
@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
//Point簽名
private void log(){} 

然后要使用所定義的Pointcut時(shí),可以指定Pointcut簽名 如下:

@Before("og()")

這種使用方式等同于以下方式,直接定義execution表達(dá)式使用

@Before("execution(* com.savage.aop.MessageSender.*(..))")

Pointcut定義時(shí),還可以使用&&、||、! 這三個(gè)運(yùn)算

@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
private void logSender(){}
@Pointcut("execution(* com.savage.aop.MessageReceiver.*(..))")
private void logReceiver(){}
@Pointcut("logSender() || logReceiver()")
private void logMessage(){}

這個(gè)例子中,logMessage()將匹配任何MessageSender和MessageReceiver中的任何方法。

還可以將一些公用的Pointcut放到一個(gè)類中,以供整個(gè)應(yīng)用程序使用,如下:

package com.savage.aop;
import org.aspectj.lang.annotation.*;
public class Pointcuts {
@Pointcut("execution(* *Message(..))")
public void logMessage(){}
@Pointcut("execution(* *Attachment(..))")
public void logAttachment(){}
@Pointcut("execution(* *Service.*(..))")
public void auth(){}
}

在使用上面定義Pointcut時(shí),指定完整的類名加上Pointcut簽名就可以了,如:

package com.savage.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class LogBeforeAdvice {
@Before("com.sagage.aop.Pointcuts.logMessage()")
public void before(JoinPoint joinPoint) {
System.out.println("Logging before " + joinPoint.getSignature().getName());
}
}

當(dāng)基于XML Sechma實(shí)現(xiàn)Advice時(shí),如果Pointcut需要被重用,可以使用aop:pointcut</aop:pointcut>來聲明Pointcut,然后在需要使用這個(gè)Pointcut的地方,用pointcut-ref引用就行了,如:

<aop:config>
  <aop:pointcut id="log" expression="execution(* com.savage.simplespring.bean.MessageSender.*(..))"/>
  <aop:aspect id="logging" ref="logBeforeAdvice">
    <aop:before pointcut-ref="log" method="before"/>
    <aop:after-returning pointcut-ref="log" method="afterReturning"/>
  </aop:aspect>
</aop:config>

到此這篇關(guān)于SpringAOP中@Pointcut的用法詳解的文章就介紹到這了,更多相關(guān)SpringAOP的@Pointcut內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring AOP實(shí)現(xiàn)權(quán)限檢查的功能

    Spring AOP實(shí)現(xiàn)權(quán)限檢查的功能

    這篇文章主要介紹了Spring AOP實(shí)現(xiàn)權(quán)限檢查的功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot之groups應(yīng)對(duì)不同的Validation規(guī)則自定義方式

    SpringBoot之groups應(yīng)對(duì)不同的Validation規(guī)則自定義方式

    這篇文章主要介紹了SpringBoot之groups應(yīng)對(duì)不同的Validation規(guī)則自定義方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決Feign調(diào)用的GET參數(shù)傳遞的問題

    解決Feign調(diào)用的GET參數(shù)傳遞的問題

    這篇文章主要介紹了解決Feign調(diào)用的GET參數(shù)傳遞的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot接口參數(shù)校驗(yàn)JSR303的實(shí)現(xiàn)

    springboot接口參數(shù)校驗(yàn)JSR303的實(shí)現(xiàn)

    本文主要介紹了springboot接口參數(shù)校驗(yàn)JSR303的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java項(xiàng)目實(shí)現(xiàn)定時(shí)任務(wù)的三種方法

    Java項(xiàng)目實(shí)現(xiàn)定時(shí)任務(wù)的三種方法

    Java開發(fā)過程中經(jīng)常會(huì)遇到使用定時(shí)任務(wù)的情況,比如在某個(gè)活動(dòng)結(jié)束時(shí),自動(dòng)生成獲獎(jiǎng)名單,導(dǎo)出excel等,下面這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目實(shí)現(xiàn)定時(shí)任務(wù)的三種方法,需要的朋友可以參考下
    2022-06-06
  • Java中的Feign深入分析

    Java中的Feign深入分析

    這篇文章主要介紹了Java中的Feign深入分析,Feign是一個(gè)用于發(fā)送HTTP請(qǐng)求的工具,它的主要作用是在不同的服務(wù)之間傳遞Token,為了使用Feign,你需要在項(xiàng)目中配置一個(gè)Feign的配置類,需要的朋友可以參考下
    2023-09-09
  • Spring MVC 簡(jiǎn)單的hello world的實(shí)現(xiàn)

    Spring MVC 簡(jiǎn)單的hello world的實(shí)現(xiàn)

    這篇文章主要介紹了Spring MVC 簡(jiǎn)單的hello world的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • java自動(dòng)生成接口文檔完整代碼示例

    java自動(dòng)生成接口文檔完整代碼示例

    在軟件開發(fā)中,編寫接口文檔是一項(xiàng)必要但繁瑣的任務(wù),為了簡(jiǎn)化這一過程,可以通過使用Swagger2和Swagger-UI來自動(dòng)生成接口文檔,這篇文章主要介紹了java自動(dòng)生成接口文檔的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot 整合 Mybatis Generator自動(dòng)生成dao、entity、mapper.xml實(shí)現(xiàn)單表增刪改查。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 解決@RequestBody搭配@Data的大坑

    解決@RequestBody搭配@Data的大坑

    這篇文章主要介紹了解決@RequestBody搭配@Data的大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論