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<String, String> params = new HashMap<>();
    params.put("pId", data[2].toString());
    
    Response response = request(api, HttpMethod.POST, params);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容