项目结构
ParseAnnotation.java
package 解析注解;
import java.lang.reflect.Method;
import java.util.Scanner;
import 注解.Annotation;
public class ParseAnnotation {
public static void main(String[] args) throws Exception {
String author;
Scanner sc = new Scanner(System.in);
author = sc.next();
Class c = Class.forName("使用注解.UseAnnotation");
Method[] ms = c.getDeclaredMethods();
for(Method m:ms) {
//获取方法前面类型为Annotation的注解
Annotation annotation = m.getAnnotation(Annotation.class);
if(annotation!=null&&annotation.author().equals(author)) {
m.invoke(c.newInstance());
}
}
}
}
UseAnnotation.java
package 使用注解;
import 注解.Annotation;
public class UseAnnotation {
@Annotation(author="zjh_1")
public void fun1() {
System.out.println("第一个方法");
}
@Annotation(author="zjh_2")
public void fun2() {
System.out.println("第二个方法");
}
@Annotation(author="zjh_3")
public void fun3() {
System.out.println("第三个方法");
}
}
Annotation.java
package 注解;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
//注解是否将包含在JavaDoc中,它代表着此注解会被javadoc工具提取成文档
@Documented
//如何存储注解
@Retention(RUNTIME)
//注解用于什么地方
@Target({TYPE,FIELD,METHOD})
public @interface Annotation {
String author() default "zjh";
}
Console