美文网首页
java注解类

java注解类

作者: 时光不说话 | 来源:发表于2017-09-21 10:53 被阅读0次

    查看代码的时候发现了一个annotation类型的文件,好奇百度了一下,又有新技能get。以前我了解的java注解,就是用//等符号标注的注释,或者@author,再或者,就是最近接触的testng框架注释。

    今天看到的代码如下:

     package com.api.common;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    
    @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.TYPE, ElementType.CONSTRUCTOR})
    public @interface DBUnitScript {
    
    public String value();
    
    public String dataSourceName();
    }
    

    文件类型为annotation,即注解。这是一个自定义的注解(Annotation)类,即DBUnitScript, 在定义注解(Annotation)类时使用了另一个注解类Retention。
    *在注解类上使用另一个注解类,那么被使用的注解类就称为元注解。

    新建注解类
    新建一个class,在kind中选择annotation类型文件,即可新建一个注解类。


    以下部分内容摘抄自孤傲苍狼,侵删。原帖地址:http://www.cnblogs.com/xdp-gacl/p/3622275.html


    注解就相当于一个你的源程序要调用一个类,在源程序中应用某个注解,得事先准备好这个注解类。就像你要调用某个类,得事先开发好这个类。

    java中元注解有四个: @Retention @Target @Document @Inherited

    1、Retention注解决定注解的生命周期

    1、@Retention()
    这里是在注解类DBUnitScript上使用另一个注解类即Retention注解,这里的Retention称为元注解。
    2、@Retention(RetentionPolicy.SOURCE)
    这个注解的意思是让DBUnitScript注解只在java源文件中存在,编译成.class文件后注解就不存在了
    3、@Retention(RetentionPolicy.CLASS)
    这个注解的意思是让DBUnitScript注解在java源文件(.java文件)中存在,编译成.class文件后注解也还存在,
    4、 @Retention(RetentionPolicy.RUNTIME)
    意思是让DBUnitScript这个注解的生命周期一直程序运行时都存在
    5、被DBUnitScript注解类标识的类被类加载器加载到内存中后MyAnnotation注解就不存在了

    @Retention元注解的讲解:其三种取值:RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME分别对应:Java源文件(.java文件)---->.class文件---->内存中的字节码

    2、Target注解

    Target注解决定注解可以加在哪些成分上,如加在类身上,或者属性身上,或者方法身上等成分,@Target默认值为任何元素(成分)

    如:

    @Target({ElementType.METHOD, ElementType.TYPE, ElementType.CONSTRUCTOR})
    

    @Target:注解的作用目标

    @Target(ElementType.TYPE) //接口、类、枚举、注解
    @Target(ElementType.FIELD) //字段、枚举的常量
    @Target(ElementType.METHOD) //方法
    @Target(ElementType.PARAMETER) //方法参数
    @Target(ElementType.CONSTRUCTOR) //构造函数
    @Target(ElementType.LOCAL_VARIABLE)//局部变量
    @Target(ElementType.ANNOTATION_TYPE)//注解
    @Target(ElementType.PACKAGE) ///包

    3、@Document:说明该注解将被包含在javadoc中

    4、 @Inherited:说明子类可以继承父类中的该注解


    为注解添加属性

    @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.TYPE, ElementType.CONSTRUCTOR})
    public @interface DBUnitScript {
    
    //属性
    public String value();//数据脚本地址
    
    public String dataSourceName();
    }
    

    把自定义的注解类加到某个类上

    @ DBUnitScript 
    public class AnnotationUse{
    
    }
    

    应用属性

        @DBUnitScript(value = "sql/addCustomAccountTitles.sql", dataSourceName = "dataSource")
        //在执行方法前先调用DBUnitScript注解
    
        public void testCustomerAccountTitles(SelectItem[] cols, Object[] data) throws Exception{
    
        String api = "";//请求api
        Map<String, String> params = new HashMap<>();
        params.put("pId", data[2].toString());
        
        Response response = request(api, HttpMethod.POST, params);
    }

    相关文章

      网友评论

          本文标题:java注解类

          本文链接:https://www.haomeiwen.com/subject/szygsxtx.html