最近在加深注解这块的理解,很多框架都使用到了注解。
直接上代码:
注解的实现类
Anno.java
package com.robot.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Anno { }
Student.java
package com.robot.test; public class Student { public int age; public String name; @Anno public int getAge() { return age; } @Anno public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.robot.test; import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class AnnotationTest { public static void main(String[] args) { Method[] methods = Student.class.getMethods(); for (Method method : methods) { Annotation[] annotations = method.getAnnotations(); for (Annotation annotation : annotations) { // 获取注解的具体类型 Class<? extends Annotation> annotationType = annotation.annotationType(); if (Anno.class == annotationType) { System.out.println(method.getName()+"()\t" + Anno.class.getName()); // 打印出java.lang.annotation.Annotation,注解类其实都实现了Annotation这个接口 Class<?>[] interfaces = Anno.class.getInterfaces(); System.out.println(interfaces[0].getName()); } } } } }
总结:可以看到注解基本上会结合反射来做,也间接提现了反射的重要性了。
上面的例子中,注解的类Anno.java中并没有写出这个注解的方法,所以还不算一个完整的例子。