java註解初步學習和使用
1 自定義註解之@Target、@Retention註解和@Documented
參考:https://blog.csdn.net/github_35180164/article/details/52118286
https://www.jianshu.com/p/ba1d384dceec
2.1 @Target註解
@Target說明了Annotation所修飾的物件範圍:Annotation可被用於 packages、types(類、介面、列舉、Annotation型別)、型別成員(方法、構造方法、成員變數、列舉值)、方法引數和本地變數(如迴圈變數、catch引數)。
看下自定義註解的簡單使用方式,定義3個執行時註解:
// 適用類、介面(包括註解型別)或列舉
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassInfo {
String value();
}
// 適用field屬性,也包括enum常量
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldInfo {
int[] value();
}
// 適用方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodInfo {
String name() default "long";
String data();
int age() default 27;
}
2.2 @Retention註解
1、RetentionPolicy.SOURCE:註解只保留在原始檔,當Java檔案編譯成class檔案的時候,註解被遺棄;
2、RetentionPolicy.CLASS:註解被保留到class檔案,但jvm載入class檔案時候被遺棄,這是預設的生命週期;
3、RetentionPolicy.RUNTIME:註解不僅被儲存到class檔案中,jvm載入class檔案之後,仍然存在;
2.3 @Documented註解
這3個生命週期分別對應於:Java原始檔(.java檔案) —> .class檔案 —> 記憶體中的位元組碼。
Documented 註解表明這個註解應該被 javadoc工具記錄. 預設情況下,javadoc是不包括註解的. 但如果宣告註解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 所以註解型別資訊也會被包括在生成的文件中
2 自定義註解之@AliasFor註解(用於為註解屬性宣告別名)
參考:https://www.jianshu.com/p/d6bba708100d
在同個註解中為同一個功能定義兩個名稱不一樣的屬性,那麼這兩個屬性彼此互為別名,別名的作用也就是在定義多個屬性時為了能做到顧名思義,隨意用都行。
2.1 顯式別名
@AnonymousAccess
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.DELETE)
public @interface AnonymousDeleteMapping {
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
}
這裡的四組別名用法是一致的!AnonymousDeleteMapping中的name、value、path和params是彼此的顯性別名,使用的時候可以通過任意屬性名來指定。
(注:@AliasFor的annotation屬性必須引用元註解,被引用的元註解必須放置在宣告瞭@AliasFor的註解類上,如RequestMapping;因為annotation是RequestMapping類,需要傳入的是地址;)
具體使用:
@RequestMapping(value = "/login")
@AnonymousPostMapping(value = "/login")
@AnonymousPostMapping(path = "/login")
2.2 隱式別名
如果註解中的一個或多個屬性宣告為同一個元註解屬性的屬性重寫(直接地或傳遞地重寫)那麼這些註解會被當作彼此的隱性別名集來對待
@ContextConfiguration
public @interface MyContextConfiguration{
@AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
String[] values() default {};
@AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
String[] path() default {};
}
@MyContextConfiguration中,valueh和path都是複寫了@ContextConfiguration中locations屬性。
具體使用:
@ContextConfiguration(locations = {})
@MyContextConfiguration(values = {})
2.3 使用規則
參考上面url即可。
相關文章
- Java學習_註解Java
- java 註解學習補充Java
- 每日註解學習(九)@PostConstruct和@PreConstruct註解Struct
- Java註解與反射學習筆記Java反射筆記
- 註解和反射學習筆記反射筆記
- java自定義註解學習(三)_註解解析及應用Java
- Mybatis學習-初步認知與使用MyBatis
- 初步學習VuexVue
- Mongoose初步學習Go
- Flask入門學習---初步瞭解模板Flask
- Java註解的使用Java
- Java註解和反射Java反射
- Java 註解和反射Java反射
- @ResponseBody註解和@RequestBody註解使用
- @Param註解學習
- Spring學習之05使用註解開發Spring
- SpringMVC入門學習---使用註解開發SpringMVC
- SVG:初步學習感想SVG
- Git的初步學習Git
- 學習Spring5必知必會(4)~使用註解配置、使用java程式碼配置SpringJava
- java中的註解使用Java
- Java集合類初步瞭解Java
- 碎片化學習Java(二)-- Java註釋Java
- 初步學習jQuery之事件jQuery事件
- Python學習 —— 初步認知Python
- Java註解與反射的使用Java反射
- Java反射和註解基本用法Java反射
- Java註解-後設資料、註解分類、內建註解和自定義註解Java
- Java註解解析-搭建自己的註解處理器(CLASS註解使用篇)Java
- 使用註解配置、使用java程式碼配置Java
- 一個實際的例子學習 SAP BTP Java 應用的 @Before 註解使用方式Java
- Java學習十六—掌握註解:讓程式設計更簡單Java程式設計
- 《機器學習初步》筆記機器學習筆記
- 結合 Laravel 初步學習 GraphQLLaravel
- Java 如何優雅的使用註解Java
- Java列舉類、註解和反射Java反射
- @GrpcServise 註解的作用和使用RPC
- 註解式專案開發!詳細解析Java中各個註解的作用和使用方式Java