模拟@Test的功能实现

注解和注释区别

* 注释:给程序员看的.
* 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.)

JDK中提供的注解

@Override :描述子类重写父类的方法:
* JDK1.5版本的时候 该注解只能应用在 类的继承上.
* JDK1.6版本的时候 该注解可以应用在 类的实现上.
@SuppressWarnings :压制警告.
@Deprecated :描述方法过时.

自定义注解

* 定义类 :class
* 定义接口 :interface
* 定义枚举 :enum
* 定义注解 :@interface

定义注解的属性:
注解的属性的类型:
* 基本数据类型
* String类型
* Class类型
* 注解类型
* 枚举类型
* 以上类型的一维数组

package com.boomoom.a_annotation.demo2;

/**
 * 自定义注解
 * @author admin
 *
 */
@Anno1
@Anno2(a=1,s="abc",c=AnnotationDemo1.class,anno1=@Anno1,color=Color.RED,arrs={"aa","bb"})
@Anno3("abc")
public class AnnotationDemo1 {

}
/**
 * 定义一个注解:名称是Anno1
 */
@interface Anno1{
    
}

/**
 * 定义一个带有属性的注解:Anno2
 */
@interface Anno2{
    int a();
    boolean b() default false;
    String s();
    // Date d();
    Class c();
    Anno1 anno1();
    Color color();
    String[] arrs();
}

enum Color{
    RED,BLUE,BLACK,YELLOW;
}

@interface Anno3{
    String value();
    int a() default 1;
}
代码实现

特殊的属性名称:value

* 如果使用注解的时候,只出现了value属性,value属性可以省略的.

 

代码实现

1、自定义注解:MyTest
2、定义核心运行类.
3、在核心运行类中.
3.1、获得测试类的Class
3.2、获得Class中的所有方法.
3.3、遍历得到每个方法.
3.4、判断方法上有MyTest注解,就执行该方法.
3.5、自定义注解默认存在于源码阶段,需要让注解存在的时间更长.使用元注解:(只用于修饰其他的注解)

package com.boomoom.a_annotation.demo3;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * 自定义注解
 * @author admin
 *
 */
// 自定义注解默认存在于源码阶段,需要让注解存在的时间更长.使用元注解:(只用于修饰其他的注解)
// 自定义注解的存在时间有源码、编译和运行阶段,指定为运行阶段,才能在运行时有自定义注解存在
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyTest {

}
MyTest
package com.boomoom.a_annotation.demo3;

public class AnnotationDemo1 {
    @MyTest
    public void demo1(){
        System.out.println("demo1执行了...");
    }
    
    @MyTest
    public void demo2(){
        System.out.println("demo2执行了...");
    }
    
    public void demo3(){
        System.out.println("demo3执行了...");
    }
}
AnnotationDemo1
package com.boomoom.a_annotation.demo3;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 核心运行类:
 * @author admin
 *
 */
public class CoreRunner {

    public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
        /**
         * 获得测试类的Class.
         * 获得Class中的所有的方法.
         * 遍历每个方法,查看每个方法上是否有MyTest注解.
         * 有MyTest注解,这个方法就执行.
         */
        
        // 1.获得测试类的Class:
        Class clazz = AnnotationDemo1.class;
        // 2.获得Class中的所有的方法: 规定了测试的方法必须是public.
        Method[] methods = clazz.getMethods();
        // 3.遍历每个方法:
        for(Method method:methods){
            boolean flag = method.isAnnotationPresent(MyTest.class);
            // System.out.println(method.getName()+ "     " + flag);
            if(flag){
                // 说明方法上有MyTest注解:
                method.invoke(clazz.newInstance(), null);
            }
        }
    }
}
CoreRunner

 

转载于:https://www.cnblogs.com/boomoom/p/10462794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值