一、前言
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()); // 中華人民共和國
}
}