很多朋友都想知道java怎么獲取注解的值?下面就一起來了解一下吧~
成都創(chuàng)新互聯公司是一家專注于成都網站設計、網站制作與策劃設計,無錫網站建設哪家好?成都創(chuàng)新互聯公司做網站,專注于網站建設十載,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:無錫等地區(qū)。無錫做網站價格咨詢:18982081108
1、定義一個注解,用于給全局變量field字段賦值
package?com.haha.study.annotation.value; import?java.lang.annotation.Documented; import?java.lang.annotation.ElementType; import?java.lang.annotation.Retention; import?java.lang.annotation.RetentionPolicy; import?java.lang.annotation.Target; /** *?description:?定義一個注解,用于給?全局變量?field?字段?賦值,并使用反射取值。?
*?特別提醒:?@Rentention(RetentionPolicy.RUNTIME)?時,注解才會被jvm加載,才能使用反射獲取。 *?@version?v1.0 *?@author?w *?@date?2018年8月1日下午2:37:40 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value=ElementType.FIELD) public?@interface?Fields?{ int?sort()?default?0?; String?value()?; }
2、創(chuàng)建一個普通的類,使用 @ConsAnnotation、@Fields 注解
package?com.haha.study.annotation.value; /** *?description:?創(chuàng)建一個普通的類,使用?@ConsAnnotation、@Fields?注解。 *?@version?v1.0 *?@author?w *?@date?2018年8月1日下午2:50:23 */ @ConsAnnotation(request?=?{?"hello","world","annotation!"?}) public?class?User?{ @Fields("中華人民共和國") private?String?userName; public?String?getUserName()?{ return?userName; } public?void?setUserName(String?userName)?{ this.userName?=?userName; } }
3、針對 com.haha.study.annotation.value.User 類使用注解的測試
package?com.haha.study.annotation.value; import?java.lang.reflect.Field; import?java.util.Arrays; /** *?description:?針對?com.haha.study.annotation.value.User?類使用注解的測試 *?@version?v1.0 *?@author?w *?@date?2018年8月1日下午2:37:13 */ public?class?ValueTest?{ public?static?void?main(String[]?args)?throws?Exception?{ User?user?=?new?User(); //?1、?獲取?User類上的注解?@ConsAnnotation ConsAnnotation?anno?=?user.getClass().getAnnotation(ConsAnnotation.class); String[]?arr?=?anno.request(); System.out.println(Arrays.toString(arr));?//?[hello,?world,?annotation!] //?2、?獲取User類中?private?String?userName;?變量上的注解?@Field Field?f?=?user.getClass().getDeclaredField("userName"); Fields?anno2?=?f.getAnnotation(Fields.class); user.setUserName(anno2.value()); System.out.println(user.getUserName());?//?中華人民共和國 } }
屬于重點,在系統中用到注解權限時非常有用,可以精確控制權限的粒度
注意:要想使用反射去讀取注解,必須將Retention的值選為Runtime Java代碼import?java.lang.annotation.Annotation;import?java.lang.reflect.Method;//讀取注解信息public?class?ReadAnnotationInfoTest?{????public?static?void?main(String[]?args)?throws?Exception?{????????//?測試AnnotationTest類,得到此類的類對象????????Class?c?=?Class.forName(com.iwtxokhtd.annotation.AnnotationTest);????????//?獲取該類所有聲明的方法????????Method[]?methods?=?c.getDeclaredMethods();????????//?聲明注解集合????????Annotation[]?annotations;????????//?遍歷所有的方法得到各方法上面的注解信息????????for?(Method?method?:?methods)?{????????????//?獲取每個方法上面所聲明的所有注解信息????????????annotations?=?method.getDeclaredAnnotations();????????????//?再遍歷所有的注解,打印其基本信息????????????System.out.println(method.getName());????????????for?(Annotation?an?:?annotations)?{????????????????System.out.println(方法名為:?+?method.getName()?+?其上面的注解為:?+?an.annotationType().getSimpleName());????????????????Method[]?meths?=?an.annotationType().getDeclaredMethods();????????????????//?遍歷每個注解的所有變量????????????????for?(Method?meth?:?meths)?{????????????????????System.out.println(注解的變量名為:?+?meth.getName());????????????????}????????????}????????}????}}
@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節(jié)碼文件中存在,在運行時可以通過反射獲取到
@Target({ElementType.FIELD,ElementType.METHOD})//定義注解的作用目標**作用范圍字段、枚舉的常量/方法
@Documented//說明該注解將被包含在javadoc中
public @interface FieldMeta {
/**
* 是否為序列號
* @return
*/
boolean id() default false;
/**
* 字段名稱
* @return
*/
String name() default "";
/**
* 是否可編輯
* @return
*/
boolean editable() default true;
/**
名稱欄目:java代碼獲取注解內容 java獲取方法的注解
標題路徑:http://aaarwkj.com/article22/docpscc.html
成都網站建設公司_創(chuàng)新互聯,為您提供虛擬主機、定制網站、網站維護、面包屑導航、Google、ChatGPT
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯