package 自定义注解;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
String age() default "20";
String name() default "fz";
}
package 自定义注解;
public class Person {
@AnnotationTest(name = "fg")
private String name;
@AnnotationTest(age="24")
private String age;
}
package 自定义注解;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Field;
/*
* 1.首先获取优质定义注解修饰类的类对象,根据类对象获取对应的属性。
* 2.判断属性上是否有注解修饰,有就获取对应的注解。(通过属性获取对应的注解,获取属性上的值就用属性去declaredField.getAnnotation(AnnotationTest.class);)
* 3.为属性赋值。第一步中的属性赋值为注解中获取的属性值。
*
* */
public class Test {
public static void main(String[] args) throws Exception {
Class p=Person.class;
Field declaredField = p.getDeclaredField("name");
declaredField.setAccessible(true);
if(declaredField.isAnnotationPresent(AnnotationTest.class)) {
AnnotationTest annotation = declaredField.getAnnotation(AnnotationTest.class);
//System.out.println(annotation.age()+":"+annotation.name());
String name = annotation.name();
Person p1=new Person();
declaredField.set(p1, name);//为declaredfield属性赋name值,其中name必须是p1中的属性。所以需要p1对象
System.out.println(declaredField.get(p1));
}
}
}