java中自定義註解並通過反射獲取註解屬性值
直接上程式碼,註釋中有說明:
1、定義自定義註解類(類註解和欄位註解):
- package com.uno.ray;
- import java.lang.annotation.Documented;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
-
import
- import java.net.Authenticator.RequestorType;
- /**
- * 自定義註解
- * @author Uno
- *@Documented:指明該註解可以用於生成doc
- *@Inherited:該註解可以被自動繼承
- *@Retention:指明在什麼級別顯示該註解:
- * RetentionPolicy.SOURCE 註解存在於原始碼中,編譯時會被拋棄
- RetentionPolicy.CLASS 註解會被編譯到class檔案中,但是JVM會忽略
-
RetentionPolicy.RUNTIME JVM會讀取註解,同時會儲存到class檔案中
- @Target:指明該註解可以註解的程式範圍
- ElementType.TYPE 用於類,介面,列舉但不能是註解
- ElementType.FIELD 作用於欄位,包含列舉值
- ElementType.METHOD 作用於方法,不包含構造方法
- ElementType.PARAMETER 作用於方法的引數
- ElementType.CONSTRUCTOR 作用於構造方法
- ElementType.LOCAL_VERIABLE 作用於本地變數或者catch語句
-
ElementType.ANNOTATION_TYPE 作用於註解
- ElementType.PACKAGE 作用於包
- */
- @Documented
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE, ElementType.FIELD})//次註解作用於類和欄位上
- public@interface FieldTypeAnnotation {
- /**
- *leip 2016年12月3日
- *TODO
- **/
- String type() default"ignore";
- int age() default27;
- String[] hobby(); //沒有指定defalut的,需要在註解的時候顯式指明
- }
- package com.uno.ray;
- import java.lang.annotation.Documented;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- *
- * @author Uno
- *
- */
- @Documented
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.METHOD) //次註解只能作用於方法上
- public@interface MethodAnnotation {
- String desc() default"method1";
- }
3、定義測試類:(反射類)
- package com.uno.ray;
- import java.awt.Dialog.ModalityType;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.util.Arrays;
- @FieldTypeAnnotation(type = "class", hobby = { "smoke" })
- publicclass ReflectAnnotation {
- /**
- * leip 2016年12月3日 TODO
- **/
- @FieldTypeAnnotation(hobby = { "sleep", "play" })
- private String maomao;
- @FieldTypeAnnotation(hobby = { "phone", "buy" }, age = 27, type = "normal")
- private String zhangwenping;
- @MethodAnnotation()
- publicvoid method1() {
- }
- @MethodAnnotation(desc="method2")
- publicvoid method2() {
- }
- publicstaticvoid main(String[] args) {
- // 此處要用反射將欄位中的註解解析出來
- Class<ReflectAnnotation> clz = ReflectAnnotation.class;
- // 判斷類上是否有次註解
- boolean clzHasAnno = clz.isAnnotationPresent(FieldTypeAnnotation.class);
- if (clzHasAnno) {
- // 獲取類上的註解
- FieldTypeAnnotation annotation = clz.getAnnotation(FieldTypeAnnotation.class);
- // 輸出註解上的屬性
- int age = annotation.age();
- String[] hobby = annotation.hobby();
- String type = annotation.type();
- System.out.println(clz.getName() + " age = " + age + ", hobby = " + Arrays.asList(hobby).toString() + " type = " + type);
- }
- // 解析欄位上是否有註解
- // ps:getDeclaredFields會返回類所有宣告的欄位,包括private、protected、public,但是不包括父類的
- // getFields:則會返回包括父類的所有的public欄位,和getMethods()一樣
- Field[] fields = clz.getDeclaredFields();
- for(Field field : fields){
- boolean fieldHasAnno = field.isAnnotationPresent(FieldTypeAnnotation.class);
- if(fieldHasAnno){
- FieldTypeAnnotation fieldAnno = field.getAnnotation(FieldTypeAnnotation.class);
- //輸出註解屬性
- int age = fieldAnno.age();
- String[] hobby = fieldAnno.hobby();
-
相關推薦
java中自定義註解並通過反射獲取註解屬性值
直接上程式碼,註釋中有說明: 1、定義自定義註解類(類註解和欄位註解): package com.uno.ray; import java.lang.annotation.Documented; import java.lang
Java的自定義註解及通過反射獲取註解
tco element pos pri jvm ado 參數聲明 機制 world 一、註解基本知識 1、元註解:@Retention @Target @Document @Inherited 2、Annotation型定義為@interface, 所有的Annot
java @interface自定義註解和通過反射獲取註解屬性值
@interface @interface用來宣告一個註解,其中的每一個方法實際上是聲明瞭一個配置引數。 方法的名稱就是引數的名稱,返回值型別就是引數的型別 引數型別只能是基本型別、Class、String、enum。 可以通過default來宣告引數的
在多執行緒中使用匿名類通過反射獲取其屬性值
標題挺彆扭的,至少我對這些高階技術瞭解的還很少,繼續學習吧...初次接觸匿名類感覺很爽,簡化了程式碼量(可能有些時候還真需要它) 控制檯的程式碼 using System.Collections.Generic; using System.Linq; using Sys
Java 自定義註解&通過反射獲取類、方法、屬性上的註解
反射 JAVA中的反射是執行中的程式檢查自己和軟體執行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在執行時根據指定的類名獲得類的資訊。 註解的定義 註解通過 @interface 關鍵字進行定義。 /** * 自定義註解 *
自定義註解,通過反射獲得註解中的值(詳細自定義註解解釋)
lean ner interface 子類 cts clas def EDA 通過 自定義註解(@Alias): package com.nf.lc.demo3; import java.lang.annotation.*; /* 定義註解的生命周期元註解:@
Java中自定義註解
隨著 java註解 can 中文名 fault rev 相同 val source 前言 隨著springboot的流行,以前基於XML的spring配置用的越來越少,JavaConfig形式使用的越來越多,類似於: @Configuration
android 自定義註解 通過反射獲取註解屬性值
參考文章:http://xuwenjin666.iteye.com/blog/1637247 1.自定義註解 package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import ja
android 自定義註解 通過反射獲取註解屬性值
1.自定義註解 package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import java.
java中自定義註解@interface在自定義校驗器validator中的使用
一,自定義註解中元註解1,保留位置:Retention 1.1 @Retention(RetentionPolicy.SOURCE) //僅存在於原始碼中,在class位元組碼檔案中不存在 1.2 @Retention(RetentionPolicy.CLASS)
java 通過反射獲取註解
使用反射獲取某個類的註釋、方法上的註釋、屬性上的註釋。 import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.x
java中自定義封裝json以及和物件的轉換
首先建立服務端返回的資料型別物件: package com.studio.pojo.util; import org.codehaus.jackson.map.ObjectMapper; publ
Java中自定義物件使用Collections工具類中的Sort方法
Collections工具類中的sort方法有兩種形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一種方法中List型別的物件必須實現Comparable介面,此外,
java中自定義使用{0}佔位符功能之MessageFormat類
MessageFormat提供一種語言無關的方式來組裝訊息,它允許你在執行時刻用指定的引數來替換掉訊息字串中的一部分。你可以為MessageFormat定義一個模式,在其中你可以用佔位符來表示變化的部分,例如在下面的測試類中: package cn.lz.life.uti
java中自定義時間減去某幾天返回減去的天數時間
<span style="font-size:18px;"><span style="white-space:pre"> </span>//減去多少天 String remindNo="5"; String dateTime="
關於Java中自定義包的建立
我在學習thinking in Java4 的時候,在建立自定義包的時候,碰到了很多錯誤,讓我鬱悶了幾天,通過在網上的資料搜尋,把包的建立過程給大家詳細列出來。 我們以thinking in Java4中的例子為例 建立兩個類Vector和List。將編譯後的Vector
java中自定義鎖實現synchronized功能
public class Test {private static long count = 0;private Lock lock = new Lock();private int m = 0;private int a = 0;private int b = 0;pub
Java中自定義異常的兩種處理方法
其中註釋掉的部分就是處理方法之一 class DivisorIsZeroException extends Exception { public DivisorIsZeroException(Str
Java中自定義異常
今天覆習了一下Java中的異常處理,折騰了一下。都知道,在Java應用程式中,對異常的處理有兩種方式:處理異常和宣告異常。處理異常使用try-catch-finally捕獲異常,宣告異常則需要將其新增到方法名結束的位置(throws)。異常分為三種:可檢測異
java中自定義列舉enum對映到mysql資料庫欄位處理器handler
今年企業對Java開發的市場需求,你看懂了嗎? >>>