注解,自定义注解

一、什么是注解

二、自定义注解

/**
 * 自定义注解
 */

public @interface MyAnnotation {
    String aaa();
    boolean bbb() default  true;
    String ccc();
}


@MyAnnotation ( aaa ="牛魔王",ccc = "sss")
public class Test {

        @MyAnnotation ( aaa = "aaa",ccc = "666")
    public void test1(){

    }

}

三、注解的原理

四、元注解


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention ( RetentionPolicy.RUNTIME )//控制下面的注解一直保留到执行时
@Target ( {ElementType.TYPE,ElementType.METHOD} )//当前被修饰的注解只能用在类上
public @interface MyTest3 {
}

五、注解的解析

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention ( RetentionPolicy.RUNTIME )
@Target ( {ElementType.TYPE,ElementType.METHOD} )
public @interface MyTest4 {
    String value();
    double aaa() default 100;
    String[] bbb();

}



public class Test4 {
   @Test
    //解析Demo类中的全部注解
    public void parseClass(){
       //1.先得到Class对象
       Class c = Demo.class;
       //2.解析类上的注解
        //判断一个类上是否有注解
       if (c.isAnnotationPresent ( MyTest4.class )){
      MyTest4 myTest4= (MyTest4) c.getDeclaredAnnotation ( MyTest4.class );
           System.out.println ( myTest4.value () );
           System.out.println ( myTest4.bbb () );

       }

   }

}

六、应用场景:模拟Junit框架

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention ( RetentionPolicy.RUNTIME )
@Target ( ElementType.METHOD )
public @interface MyTest {

}



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

public class Test2 {
    @MyTest
    public void test1(){
        System.out.println ("===========tes1========");
    }

//    @MyTest
    public void test2(){
        System.out.println ("===========tes2========");
    }

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

    @MyTest
    public void test4(){
        System.out.println ("===========tes4========");
    }

    public static void main(String[] args) throws Exception {
        Test2 test = new Test2 ();
        //1.启动程序
        //得到Class对象
        Class  c = Test2.class;
        //2.提取这个类中的全部成员方法
        Method[] methods = c.getDeclaredMethods ();
        for (Method method : methods) {
            if (method.isAnnotationPresent ( MyTest.class )) {
                //判断当前成员方法是否存在MyTest注解 如果存在 就触发执行
                method.invoke (test  );

            }
        }

    }
}

文章来源地址https://uudwc.com/A/mNybk

原文地址:https://blog.csdn.net/m0_64703222/article/details/133207980

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月24日 13:39
光谱、多光谱技术、高光谱技术以及遥感中的应用
下一篇 2023年09月24日 13:41