package AnnotationTest;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)//注解只能注解方法
@Retention(RetentionPolicy.RUNTIME)//存活范围是一直存在
public @interface MyTest {
}
package AnnotationTest;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AnnotaionTest {
//@MyTest
public void test1(){
System.out.println("===test1===");
}
@MyTest
public void test2(){
System.out.println("===test2===");
}
//@MyTest
public void test3(){
System.out.println("===test3===");
}
@MyTest
public void test4(){
System.out.println("===test4===");
}
public static void main(String[] args) throws Exception {
AnnotaionTest a = new AnnotaionTest();
//启动程序
//1、得到Class对象
Class c = AnnotaionTest.class;
//2、提取这个类中的全部成员方法
Method[] methods = c.getDeclaredMethods();
//3、遍历这个数组中的每个方法,看方法上是否存在@MyTest注解
//存在,触发该方法执行
for (Method method : methods) {
if (method.isAnnotationPresent(MyTest.class)){
//当前方法上存在@MyTest注解,触发方法执行
method.invoke(a);
}
}
}
}
当添加了@MyTest注解,方法就执行,如果没添加@MyTest注解就不执行,模仿了Junit框架技术。主要用到的知识点有:反射、自定义注解。