java注解类

查看代码的时候发现了一个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 params = new HashMap<>();
    params.put("pId", data[2].toString());
    
    Response response = request(api, HttpMethod.POST, params);
}

你可能感兴趣的:(java注解类)