1. 程式人生 > >spring AOP切面,註解實現,獲取引數

spring AOP切面,註解實現,獲取引數

Spring的AOP有兩種實現方式,一是通過xml配置,二是通過註解,為減少程式碼量提高可讀性跟程式碼入侵本,若專案使用了spring的框架,本人首選的都是用註解去開發,方法很簡單,只需要三步就可以搞定切面

一:在xml檔案中開始註解

<!--AOP切面,將所有被Aspectj標註的類生成所有代理物件-->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

二:定義切面類,加上註解
/**
 * 使用者操作記錄日誌 切面控制層
 * Created by longzhiqinag on 2017/3/29.
 */
@Aspect
@Component
public class UserOperateLogHandler{

}


三:在切面類上指定要進行AOP切面的方法
    @Before("execution(* com.tangcy.npcmeeting.controller.MeetingController.deleteBigMeeting(..))")
    public void deleteBigMeeting_Before(JoinPoint joinPoint){
        System.out.println("這裡是目標方法執行前先執行");
    }
    @AfterReturning(returning = "entity",value = "execution(* com.tangcy.npcmeeting.controller.MeetingController.deleteBigMeeting(..))")
    public void deleteBigMeeting_After(JoinPoint joinPoint,Object entity){
        System.out.println("這裡是目標方法執行完併成功返回結果 正常結束後才執行");
        System.out.println("方法的返回結果為"+entity);
        System.out.println("目標方法內的引數為"+ Arrays.asList(joinPoint.getArgs()));
    }
    @AfterThrowing(throwing = "e",value = "execution(* com.tangcy.npcmeeting.controller.MeetingController.deleteBigMeeting(..))")
    public void deleteBigMeeting_Throw(Throwable  e){
        System.out.println("這裡是目標方法丟擲異常後才執行");
        System.out.println("異常資訊為"+e);
    }

用大白話說
  1. 由@Before註解定義的方法會在 execution() 表示式內的方法被呼叫之前執行
  2. 由@After註解定義的方法會在 execution()表示式內的方法被呼叫之後執行,無論方法執行成功與否
  3. 由@AfterReturning註解定義的方法會在 execution()表示式內的方法被呼叫之後併成功返回結果後執行,若丟擲異常AfterReturning不會執行
  4. 由@AfterThrowing註解定義的方法會在 execution()表示式內的方法丟擲異常後執行
  5. 由@Around註解定義的方法包裹了被通知的方法,在被通知的方法呼叫之前和呼叫之後執行自定義的行為
execution表示式 如:
@AfterReturning("execution(* com.tangcy.npcmeeting.controller.OperateController.save(..))")
* 代表匹配方法的所有修飾符和所有返回值,經測式,方法修飾符若為private則不行,會出錯 500,這裡也可以這樣寫 @AfterReturning("execution(public void com.tangcy.npcmeeting.controller.OperateController.save(..))") 在 * 的位置換成你的方法修飾符跟返回值型別即可 .. 代表匹配方法的所有引數,無論該方法有多少個引數,是什麼型別都匹配,若你的方法行參型別為String 也可以這樣寫 在..的地方換成你的引數型別即可,可寫多個引數型別 @AfterReturning("execution(* com.tangcy.npcmeeting.controller.OperateController.save(String))")
com.tangcy.npcmeeting.controller 為方法的包路徑/名
在你自定義的方法上加上 JoinPoint做為引數 可以獲取將被切面方法的引數 注意是 
org.aspectj.lang.JoinPoint;這個包下的JoinPoint,返回值型別為Object[],需自已轉換型別
如以下為自定義的方法 
@AfterReturning("execution(public void com.tangcy.npcmeeting.controller.OperateController.save(..))")
public void save_After(JoinPoint joinPoint){
Object[] obj = joinPoint.getArgs();
//將obj強轉為你的引數型別再進行對應的操作
}
所有的註解通知用法都一樣,這裡只是用@AfterReturning來舉例說明
很簡單吧...

相關推薦

spring AOP切面,註解實現,獲取引數

Spring的AOP有兩種實現方式,一是通過xml配置,二是通過註解,為減少程式碼量提高可讀性跟程式碼入侵本,若專案使用了spring的框架,本人首選的都是用註解去開發,方法很簡單,只需要三步就可以搞

Spring AOP切面基礎 實現請求引數的驗證

1.應用的場景 對部分函式的呼叫進行日誌記錄,用於觀察特定問題在執行過程中的函式呼叫情況監控部分重要函式,若丟擲指定的異常,需要以簡訊或郵件方式通知相關人員監控部分重要函式的執行時間,更靈活植入和取消介面報文的引數驗證基本的Demo程式碼 切面類 package co

Spring 4.0 學習日記(8) ---AOP切面註解實現五種通知

寫在前面 會有專門的一章來備註AOP切面各種的知識點 這裡我只寫通過註解實現的五種通知 其實我就是懶~~~略略略略略略 通知(Advice)型別 前置通知(Before advice):在某連線點(JoinPoint)之前執行的通知,但這個通知不能

Spring AOP 基於註解實現日誌記錄+自定義註解

一、寫一個自定義註解        註解中包括配置方法所在模組名稱,以及功能名稱,當然我們在註解裡可以自定義。import java.lang.annotation.Documented; import java.lang.annotation.ElementType; im

spring aop advice註解實現的幾種方式

spring的aop advice(可以理解為切面上的邏輯)用註解來實現有五種實現方式: @Before(execution) 在方法執行前攔 @AfterReturning(execution)在方法正常return結束後攔截 @AfterThrowin

Spring AOP切面實現引數傳遞

通知方法引數注入: 在Spring AOP中,除了execution和bean指示符不能傳遞引數給通知方法,其他指示符都可以將匹配的相應引數或物件自動傳遞給通知方法。 1、獲取匹配的引數 通過"argNames"屬性指定引數名。 @Before(value="args(p

springaop註解實現方式簡單實例

xsd 說話 2017年 nco 執行 str throw tar pac   上篇中我們講到spring的xml實現,這裏我們講講使用註解如何實現aop呢。前面已經講過aop的簡單理解了,這裏就不在贅述了。 註解方式實現aop我們主要分為如下幾個步驟(自己整理的,有更好的

Spring:使用Spring AOP時,如何獲取目標方法上的註解

cati 相關操作 config 使用 ide bject poi 註解 except 當使用spring AOP時,判斷目標方法上的註解進行相關操作,如緩存,認證權限等 自定義註解 package com.agent.annotation; import ja

Spring AOP切面優先順序(XML和註解

【Spring4.0筆記整理十四】AOP切面優先順序(XML和註解) - CSDN部落格 https://blog.csdn.net/sun8112133/article/details/80551886     我們常常會遇到這樣一個問題, 如果有兩個或多個切面同時對應同一個

Spring AOP 基於註解AOP 實現 記錄日誌,異常捕獲

        最近在做專案時要求在請求控制層時要列印傳入的引數,一般的做法就是把請求的引數bean toString(),一下,Logger 打印出來,但是感覺這種很麻煩,每一個方法都要加這一行程式碼,那麼就想到Spring AOP 面向切面程式設計,我們可以在被請求的方法

spring AOP切面程式設計——基於自定義註解

AOP稱為面向切面程式設計,在程式開發中主要用來解決一些系統層面上的問題,比如日誌,事務,許可權等待, (1)Aspect(切面):通常是一個類,裡面可以定義切入點和通知 (2)JointPoint(連線點):程式執行過程中明確的點,一般是方法的呼叫 (3)Advice(

spring AOP註解 配置實現(附 Java 程式碼例項)

轉載自http://blog.csdn.net/qq_27093465/article/details/53381527 匯入類掃描的註解解析器名稱空間:xmlns:context="http://www.springframework.org/schema/cont

Spring AOP攔截Service實現日誌管理(自定義註解的方式)

最近專案中用到AOP方式進行Service操作方法日誌管理,特為之記! 1、先說理論和採用的方法 採用註解的方式,其中包括以下註解:@Aspect(類註解)和@AfterReturning(方法註解),其中需要用的Maven庫如下: "org.aspectj:aspect

spring aop切面動態代理xml配置實現

上次我已經寫過aop用註解實現的這次是用配置實現,個人感覺配置實現比較好,畢竟程式是給人看的嗎,配置裡寫的一清二楚,別人看來也好懂,而且配置修改起來也比較容易,便於後期維護及修改,而才用註解方式的修改,需要修改註解,或者重寫實現類,比較麻煩,建議採用配置方式實現,至於效能方

[Spring]AOP切面程式設計/原理/基於註解/基於xml

AOP概念不講廢話,面向切面就比如說有很多個業務邏輯程式碼,如果你要修改程式碼,在程式碼實現前後增加一條邏輯,比如要判斷後才執行程式碼,你總不能一條條去改各個類的程式碼。所以切面就是說執行一個方法,這個方法變為一個切入點來配置,你可以定義這個切入點,你想在執行這個方法之前增加

Spring Aop基於註解實現

一.AspectOriented Programing,面向切面程式設計。   AOP主要用於日誌記錄,效能統計,安全控制(許可權控制),事務處理,異常處理等。將日誌記錄,效能統計,安全控制,事務處理,異常處理等程式碼從業務邏輯程式碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立

Spring AOP 切面表達式

.com text images ebe watermark image process 表達式 acea 如下註解 匹配Spring AOP 切面表達式

spring aop配置及實現

aop配置一、編寫接口代碼二、編寫接口代碼實現類三、編寫要實現切入的類四、編碼xml配置文件註:<aop:before> 為前切,<aop:after>為後切五、編寫測試代碼六、測試結果如下spring aop配置及實現

Spring AOP整合redis 實現緩存統一管理

integer eva spring eas chm 形參 結束 system 常量 項目使用redis作為緩存數據,但面臨著問題,比如,項目A,項目B都用到redis,而且用的redis都是一套集群,這樣會帶來一些問題。問題:比如項目A的開發人員,要緩存一些熱門數據,想到

Spring整合Redis註解實現

之前我們說了Spring這個Redis,使用RedisTemplate 實現,不過有些地方也過於麻煩,因此Spring 團隊對 Jedis 進行了封裝,獨立為 spring-data-redis 專案,配合 spring 特性並整合 Jedis 的一些命令和方法。並提供了相關注解,幫助我們快