SpringBoot之自定義註解面向控制層切面

導讀:

自定義註解,然後應用在SpringBoot Controller層,並借用AOP切面取值。有時間再擴展成權限校驗。

1、註解

Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它 annotation類型作說明。Java5.0定義的元註解:

@Target: 說明了Annotation所修飾的對象範圍:Annotation可被用於 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。

作用: 用於描述註解的使用範圍(即:被描述的註解可以用在什麼地方)

取值(ElementType)有:

a.CONSTRUCTOR:用於描述構造器

b.FIELD:用於描述域

c.LOCAL_VARIABLE:用於描述局部變量

d.METHOD:用於描述方法

e.PACKAGE:用於描述包

f.PARAMETER:用於描述參數

g.TYPE:用於描述類、接口(包括註解類型) 或enum聲明

@Retention 定義了該Annotation被保留的時間長短:某些Annotation僅出現在源代碼中,而被編譯器丟棄;而另一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會被虛擬機忽略,而另一些在class被裝載時將被讀取(請注意並不影響class的執行, 因為Annotation與class在使用上是被分離的)。使用這個meta-Annotation可以對 Annotation的“生命週期”限制。

取值(RetentionPoicy)有:

a.SOURCE:在源文件中有效(即源文件保留)

b.CLASS:在class文件中有效(即class保留)

c.RUNTIME:在運行時有效(即運行時保留)

記住這兩個。

2、AOP切面

a、Aspect(切面):通常是一個類,裡面可以定義切入點和通知

b、JointPoint(連接點):程序執行過程中明確的點,一般是方法的調用

c、Advice(通知):AOP在特定的切入點上執行的增強處理,有before,after,afterReturning,afterThrowing,around

(1)Before:在目標方法被調用之前做增強處理,@Before只需要指定切入點表達式即可

(2)AfterReturning:在目標方法正常完成後做增強,@AfterReturning除了指定切入點表達式後,還可以指定一個返回值形參名returning,代表目標方法的返回值

(3)AfterThrowing:主要用來處理程序中未處理的異常,@AfterThrowing除了指定切入點表達式後,還可以指定一個throwing的返回值形參名,可以通過該形參名

來訪問目標方法中所拋出的異常對象

(4)After:在目標方法完成之後做增強,無論目標方法時候成功完成。@After可以指定一個切入點表達式

順序:進入目標方法時,先織入Around,再織入Before,退出目標方法時,先織入Around,再織入AfterReturning,最後才織入After。

(5)Around:環繞通知,在目標方法完成前後做增強處理,環繞通知是最重要的通知類型,像事務,日誌等都是環繞通知,注意編程中核心是一個ProceedingJoinPoint

d、Pointcut(切入點):就是帶有通知的連接點,在程序中主要體現為書寫切入點表達式

e、AOP代理:AOP框架創建的對象,代理就是目標對象的加強。Spring中的AOP代理可以使JDK動態代理,也可以是CGLIB代理,前者基於接口,後者基於子類

SpringBoot之自定義註解面向控制層切面

3、基於SpringBoot實現

SpringBoot之自定義註解面向控制層切面

類註解

SpringBoot之自定義註解面向控制層切面

方法註解

SpringBoot之自定義註解面向控制層切面

controller應用註解

SpringBoot之自定義註解面向控制層切面

定義切面

SpringBoot之自定義註解面向控制層切面

切面獲取註解值

SpringBoot之自定義註解面向控制層切面

最後打印效果:

SpringBoot之自定義註解面向控制層切面

意義:挺大的,至於在實際項目中怎麼運用,就看自己的領悟能力,比如:日誌記錄、事務控制、權限設置、各種監控校驗。。。等等

注:歡迎轉發,點贊,切勿轉載至其他平臺發佈。


分享到:


相關文章: