導讀:
自定義註解,然後應用在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代理,前者基於接口,後者基於子類
3、基於SpringBoot實現
最後打印效果:
意義:挺大的,至於在實際項目中怎麼運用,就看自己的領悟能力,比如:日誌記錄、事務控制、權限設置、各種監控校驗。。。等等
注:歡迎轉發,點贊,切勿轉載至其他平臺發佈。
閱讀更多 碼農筆記Day 的文章