zoukankan      html  css  js  c++  java
  • 模拟@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
  • 相关阅读:
    Eclipse下Tomcat插件的安装
    Eclipse插件的安装方法
    tomcat 详解五 tomcat页面设置访问权限
    W3C XML Schema 教程
    vb.net向Excel中写入值
    用VB操作Excel的方法
    怎样用VB自动更新应用程序
    VB读写INI文件的四个函数以及相关API详细说明
    oracle数据库元数据SQL查询
    javascript JTimer_2.0 时间日历控件使用方法
  • 原文地址:https://www.cnblogs.com/boomoom/p/10462794.html
Copyright © 2011-2022 走看看