當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Aop 5种通知写法及参数JoinPoint详解
生活随笔
收集整理的這篇文章主要介紹了
Spring Aop 5种通知写法及参数JoinPoint详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spring Aop切面參數JoinPoint詳解
鏈接: 關于代理的一些基礎知識(非必看).
Spring Aop切面參數JoinPoint詳解
- Spring Aop切面參數JoinPoint詳解
- Spring Aop5種代理通知的寫法:
- 1.前置通知
- 2.后置通知
- 3.返回后通知
- 4.異常通知
- 5.環繞通知
- JoinPoint是什么:
- Signature 是什么:
- ProceedingJoinPoint是什么:
Spring Aop5種代理通知的寫法:
1.前置通知
@Before("method()")public void doBeforeAdvice(JoinPoint joinPoint){System.out.println("我是前置通知!!!");}2.后置通知
@After("method()")public void returnAfter(JoinPoint joinPoint){System.out.println("我是后置通知!!!");}3.返回后通知
@AfterReturning(value="method()",returning = "result")public void afterReturning(JoinPoint joinPoint,Object result){System.out.println("我是返回后通知!!!返回值是:"+result);}4.異常通知
@AfterThrowing(value = "method()",throwing = "ex")public void afterThrowing(JoinPoint joinPoint,Exception ex){System.out.println("我是異常通知!!!異常是::"+ex);}5.環繞通知
@Around(value = "method()")public Object aroundLogging(ProceedingJoinPoint joinPoint){System.out.println("我是環繞通知");joinPoint.proceed(); //調用目標方法System.out.println("我是環繞通知");return true;}?
JoinPoint是什么:
JoinPoint對象封裝了SpringAop中切面方法的信息,在切面方法中添加JoinPoint參數,就可以獲取到封裝了該方法信息的JoinPoint對象.
我們看看常用的幾個方法:
由于AOP代理原理是直接添加字節碼文件,不創建新的對象。所以getThis()和getTarget()獲取到的是同一個對象。
其他的一些api:
System.out.println("目標方法名為:" + joinPoint.getSignature().getName()); System.out.println("目標方法所屬類的簡單類名:" + joinPoint.getSignature().getDeclaringType().getSimpleName()); System.out.println("目標方法所屬類的類名:" + joinPoint.getSignature().getDeclaringTypeName()); System.out.println("目標方法聲明類型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));Signature 是什么:
Signature 封裝了被代理方法的全部信息(方法命、注解),以及該方法所屬類的信息。
可以看到,Signature 是一個父級接口,它有數十個實現類。我們這里模擬一下獲取被代理方法的方法對象:
獲取到了方法對象之后,我們就可以調用api,獲取方法的所有信息,甚至可以調用.invoke()直接調用方法:
?
ProceedingJoinPoint是什么:
我們注意到,在環繞通知中,參數是ProceedingJoinPoint:
@Around(value = "method()")public Object aroundLogging(ProceedingJoinPoint joinPoint){System.out.println("我是環繞通知");joinPoint.proceed(); //調用目標方法System.out.println("我是環繞通知");return true;}我們進去看看ProceedingJoinPoint 的源碼:
我們發現ProceedingJoinPoint 是繼承了JoinPoint,作為子接口(擴展了兩個方法)。
為什么呢?因為ProceedingJoinPoint 是專為環繞通知服務的,既然是環繞通知,那么調用被代理方法的動作就必須我們手動觸發了,所以ProceedingJoinPoint 增加了兩個新的方法:
好了 基本已經講完,歡迎大家評論區指出不足,一起學習進步!
大家看完了點個贊,碼字不容易啊。。。
總結
以上是生活随笔為你收集整理的Spring Aop 5种通知写法及参数JoinPoint详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人建模中移动关节如何建立坐标系_简述
- 下一篇: 获取高薪职位的六个妙计