@Retention定義了該Annotation被保留的時間長短:
1.某些Annotation僅出現在源代碼中,而被編譯器丟棄;
2.另一些卻被編譯在class文件中,注解保留在class文件中,在加載到JVM虛擬機時丟棄,這是默認行為,所以沒有用Retention注解的注解,都會采用這種策略
3.而另一些在class被裝載時將被讀取,注解保留在程序運行期間,此時可以通過反射獲得定義在某個類上的所有注解
作用:表示需要在什么級別保存該注釋信息,用於描述注解的生命周期(即:被描述的注解在什么范圍內有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在運行時有效(即運行時保留)
Retention meta-annotation類型有唯一的value作為成員

它的取值來自java.lang.annotation.RetentionPolicy的枚舉類型值。具體實例如下:
RateLimit 注解的的RetentionPolicy的屬性值是RUNTIME,這樣注解處理器可以通過反射,獲取到該注解的屬性值,從而去做一些運行時的邏輯處理
