基础加强之反射注解

    技术2022-07-11  95

    反射注解

    要求 注解的保留策略必须是RUNTIME 反射注解需要从作用目标上返回 类上的注解,需要使用Class来获取方法上的注解,需要Method来获取构造器上的注解,需要Construcator来获取成员上的,需要使用Field来获取

    Class Method、Constructor、Field:AccessibleObject

    它们都有一个方法:

    Annotation getAnnotation(Class),返回目标上指定类型的注解!Annotation[] getAnnotations(),返回目标上所有注解!

    代码实践

    package cn.itcast.demo2; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; import org.junit.Test; /** * 反射注解 * @author WenHuagang * */ public class Demo2 { @Test public void fun1() { /* * 1.得到作用目标 * 这次反射类上的注解 */ Class<A> c = A.class; /* * 2.获取指定类型的注解 */ MyAnno1 myAnno1 = c.getAnnotation(MyAnno1.class); System.out.println(myAnno1.name()+"," +myAnno1.age() + "," + myAnno1.sex()); // A类,100,男 } @Test public void fun2() throws SecurityException, NoSuchMethodException { /* * 1.获取作用目标 * 这次反射方法上的注解 */ Class<A> clazz = A.class; Method method = clazz.getMethod("fun1"); /* * 2.获取指定类型的注解 */ MyAnno1 myAnno1 = method.getAnnotation(MyAnno1.class); System.out.println(myAnno1.name() + "," +myAnno1.age() + "," + myAnno1.sex()); } } @MyAnno1(age=100, name="A类", sex="男") class A { @MyAnno1(age=666, name="fun1()方法", sex="女") public void fun1() { } } //一定不要忘记加保留策略(RUNTIME注解加载到JVM中) @Retention(RetentionPolicy.RUNTIME) @interface MyAnno1{ int age(); String name(); String sex(); }
    Processed: 0.010, SQL: 9