自定义注解

1.自定义注解

/**
 * 声明了自定义注解
 * 定义其“特殊含义”为 单元测试功能。
 *Retention:作用是组件的传播范围,取值RUNTIME时候
 * 注解将传播到“运行期间”。默认值为:SOURCE
 * Target:注解的可标注位置。METHOD:方法
 * 默认值是任意位置,都可以标注
 * 
 * @Retention 和 @Target 其“特殊意义”由JAVA编译器负责处理解析。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface requestMapping{
		public String value();
}
  1. 测试

    public class HelloController {

    @requestMapping(value = “/hello.do”)
    public String hello(){
    return “Hello”;
    }
    }

3.相关反射

	 * 动态加载类TestCase,利于反射API,获取
	 * 类中声明的全部方法信息,然后在方法上
	 * 获得标注的注解信息。证明Test注解传播
	 * 到了“运行期间”
	 
	String className="demo.TestCase";
	//动态加载类
	Class cls=Class.forName(className);
	//查找类上声明的全部方法信息
	Method[] methods=cls.getDeclaredMethods();
	for(Method method:methods){
		/*查找在方法中标注的注解(Annotation)信息
		这个方法返回Annotation数组,表示返回
		在方法上标注的多个注解。
		如果没有注解则返回空数组*/
		System.out.println("方法:"+method);
		/*查找方法上指定@Test的直接,返回值
		 * 如果找到,则返回@Test注解的“注解类型”对象,
		 * 如果没有找到,则返回null。在实际编程时候
		 * 经常检查这个方法返回值是否为null,如果不为null
		 * 就表示找到注解了!
		 */
		Test test=method.getAnnotation(Test.class);
		//检查是否包含@Test注解
		Annotation[] anns=method.getAnnotations();
		if(test!=null){
			//在method方法上找到注解
			System.out.println(method+"包含"+test);
		}
		for(Annotation ann:anns){
			System.out.println(ann);
		}
  1. JUnit4的“原型”

public class JUnit4 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
/**
* JUnit4的“原型”
* 1.动态加载被测试对象
* 2.动态创建测试对象
* 3.动态查找测试类中标注了@Test注解的测试方法
* 4.利用反射在对象上调用测试方法
*
*通过如上代码解析@Test注解,为注解实现其“特殊功能”,就是自动执行标注了@Test的方法
*/
Scanner scan=new Scanner(System.in);
System.out.println(“输入测试类名:”);
String className=scan.nextLine();
Class cls=Class.forName(className);
//利用反射API动态创建cls类型的实例
Object obj=cls.newInstance();//创建对象
//找到所有方法
Method[] methods=cls.getDeclaredMethods();
for(Method method:methods){
//查找包含@Test注解的方法
Test test=method.getAnnotation(Test.class);
if(test!=null){
//在method上找到@Test注解
//利用反射调用对象的方法
method.invoke(obj);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值