Java 注解作用与应用场景

1585364631
2023-02-20 / 0 评论 / 113 阅读 / 正在检测是否收录...

Java 注解作用与应用场景

模拟Junit框架

需求:

  • 定义若干个方法,只要加了MyTest注解,就会触发该方法执行。
    分析:
  • 定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在。
  • 定义若干个方法,部分方法加上@MyTest注解修饰,部分方法不加
  • 模拟一个junit程序,可以触发加了@MyTest注解方法执行
package frame;

import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

@Target(ElementType.METHOD) //注解只能在方法使用
@Retention(RetentionPolicy.RUNTIME) //让注解可以一直存活
@interface MyTest {

}

public class DEMO {
    // @MyTest
    private void test1(){
        System.out.println("-----test1-----");
    }

    @MyTest
    public void test2(){
        System.out.println("-----test2-----");
    }

    // @MyTest
    public void test3(){
        System.out.println("-----test3-----");
    }

    @MyTest
    private void test4(){
        System.out.println("-----test4-----");
    }

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
        Class demoClass = DEMO.class;
        DEMO demo = new DEMO();
        Method[] declaredMethods = demoClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            if (declaredMethod.isAnnotationPresent(MyTest.class)){
                declaredMethod.setAccessible(true);
                declaredMethod.invoke(demo);
            }
        }
    }

}

运行结果

-----test2-----
-----test4-----
0

评论 (0)

取消