注解综合案例需求:
模拟Junit测试的@Test实现以下两种情况
若添加了@Test注解的方法,就可以使用单元测试运行
若没有添加@Test注解的犯法,就不能使用单元测试运行
分析:
- 自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)
- 创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest
- 使用反射技术获取测试类的class文件对象
- 使用class文件对象中的方法newInstance实例化对象
- 使用反射技术获取到测试类中所有方法,返回一个Method数组
- 遍历Method数组,获取每一个Method方法
- 判断获取到的Method方法上是否有指定的注解@MyTest
- 如果方法有@MyTest注解,让方法运行
代码实现:
1、自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)
package com.ccc.demo09Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//1、自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
2、创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest
package com.ccc.demo09Annotation;
//2.创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest
public class DemoMyTest {
public void test01(){
System.out.println("test01方法");
}
@MyTest
public void test02(){
System.out.println("test02方法");
}
public void test03(){
System.out.println("test03方法");
}
@MyTest
public void test04(){
System.out.println("test04方法");
}
}
剩余六步
package com.ccc.demo09Annotation;
import java.lang.reflect.Method;
public class Demo01AnnotationTest {
public static void main(String[] args) throws Exception {
//3.使用反射技术获取测试类的class文件对象
Class clazz = Class.forName("com.ccc.demo09Annotation.DemoMyTest");
//4.使用class文件对象中的方法newInstance实例化对象
Object obj = clazz.newInstance();
//5.使用反射技术获取到测试类中所有方法,返回一个Method数组
Method[] declaredMethods = clazz.getDeclaredMethods();
//6.遍历Method数组,获取每一个Method方法
for (Method method : declaredMethods) {
//7.判断获取到的Method方法上是否有指定的注解@MyTest
if(method.isAnnotationPresent(MyTest.class)){
//8.如果方法有@MyTest注解,让方法运行
method.invoke(obj);
}
}
}
}