欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringAOP中@Pointcut的用法詳解

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

SpringAOP的@Pointcut

格式:

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

括號中各個pattern分別表示:

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

其中后面跟著“?”的是可選項

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

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的定義包括兩個部分:Pointcut表示式(expression)和Pointcut簽名(signature)

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

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

@Before("og()")

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

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

Pointcut定義時,還可以使用&&、||、! 這三個運算

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

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

還可以將一些公用的Pointcut放到一個類中,以供整個應用程序使用,如下:

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時,指定完整的類名加上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());
}
}

當基于XML Sechma實現(xiàn)Advice時,如果Pointcut需要被重用,可以使用aop:pointcut</aop:pointcut>來聲明Pointcut,然后在需要使用這個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>

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

相關文章

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

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

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

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

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

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

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

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

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

    Java項目實現(xiàn)定時任務的三種方法

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

    Java中的Feign深入分析

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

    Spring MVC 簡單的hello world的實現(xiàn)

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

    java自動生成接口文檔完整代碼示例

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

    SpringBoot整合Mybatis Generator自動生成代碼

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

    解決@RequestBody搭配@Data的大坑

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

最新評論