java註解使用、java獲取註解的屬性、獲取註解的字段值

                     java註解使用、java獲取註解的屬性、獲取註解的字段值

 

一、前言

1、前面一直講註解的基礎知識,註解的定義,對於註解的使用幾乎是一筆略過,本篇將着重講講註解的使用。 獲取註解的屬性,通過反射獲取註解的屬性值。

 

二、示例代碼

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 字段 賦值,並使用反射取值。 <br>
* 特別提醒: @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、定義一個註解 。

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: 定義一個註解。
* @version v1.0
* @author w
* @date 2018年8月1日下午2:41:45
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ConsAnnotation {
    String[] request();
}

 

3、創建一個普通的類,使用 @ConsAnnotation、@Fields 註解

package com.haha.study.annotation.value;
/**
* description: 創建一個普通的類,使用 @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;
    }
}


 

4、針對 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()); // 中華人民共和國
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章