JavaSE進(jìn)階-注解:JavaSE元注解和JavaEE原生注解

JavaSE元注解

在注解定義時(shí),用在注解頭部的注解,稱為元注解,目前元注解在java.lang.annotation包內(nèi),分別@Target,@Retention,@Documented,@Inherited,@Repeatable,@Native

@Documented

當(dāng)一個(gè)注解上面有此注解時(shí),使用此注解的方法等在生成Doc時(shí),Doc中會(huì)包含此注解,舉例如下

實(shí)驗(yàn)用注解:

@Documented
@Target(ElementType.TYPE)
@interface Version {
    String value();
}

測(cè)試類:

@Version("1.0")
public class TestCase {

}

生成的文檔中

taste.annotations.meta.documented
類 TestCase

java.lang.Object
    taste.annotations.meta.documented.TestCase 


@Version(value="1.0")  <<注解會(huì)被包含在文檔中
public class TestCase
extends java.lang.Object

@Inherited

注解被用在類聲明上時(shí),可以使用此注解,被這類注解修飾的類,子類與父類有相同的注解
比如

@Inherited @interface Persistent { }
@Persistent class Employee { . . . }
class Manager extends Employee { . . . } // <==這個(gè)類,也有Persitent注解

類Manager同樣有@Persistent注解,也即一個(gè)類是可持久化的,那他的子類也是可持久化的,類似的例子還有@Serializable,但由于這個(gè)特性是在JDK1.1推出的,早于注解出現(xiàn)前,因此沒(méi)有用注解的形式

@Repeatable

注解被指定為@Repeatable時(shí),注解可以在同一個(gè)位置多次實(shí)現(xiàn),但定義此注解時(shí),需要同時(shí)定義一個(gè)容器注解,來(lái)包括重復(fù)的注解類,

知識(shí)要點(diǎn)

  1. 容器注解必須有一個(gè)名為value,類型為包裹注解數(shù)組的變量,且其他變量必須有默認(rèn)值
  2. 獲取注解時(shí),若注解確實(shí)是多次定義,則調(diào)用getAnnotation(.class)方法返回null,實(shí)際使用時(shí),若需處理可重復(fù)注解,請(qǐng)使用getDeclaredAnnotationsByType(.class)方法,返回的是對(duì)應(yīng)注解實(shí)例的數(shù)組

舉例:

定義可重復(fù)注解:

@Repeatable(InfoArray.class)
@Retention(RetentionPolicy.RUNTIME)
@interface Info {
    String value();
}

定義包裹的注解

@Retention(RetentionPolicy.RUNTIME)
@interface InfoArray {
    Info[] value();
    String desc() default "a";
}

使用注解:

@Info("Created by kk")
@Info("On 2019/4/13")
public class TestCase {    
}

獲取注解:

    public static void main(String[] args) {
        Class<TestCase> testCaseClass = TestCase.class;
        Info infoAnnotation = testCaseClass.getAnnotation(Info.class);
        System.out.println(infoAnnotation);

        Info[] infoArray = testCaseClass.getDeclaredAnnotationsByType(Info.class);
        for (Info info : infoArray) {
            System.out.println(info.value());
        }
    }

輸出

null
Created by kk
On 2019/4/13

JavaEE原生注解

@SuppressWarnings("unchecked")

忽略某些Warning

@Override

表明某方法是復(fù)寫(xiě)父類方法

@Generated

表明此代碼為自動(dòng)生成,用來(lái)給IDE提供標(biāo)識(shí)以隱藏默寫(xiě)代碼,或者給代碼生成工具提供標(biāo)識(shí)以替換,有三個(gè)Field,典型用法:

@Generated(value = "com.kkyeer.taste",date = "2019-01-04T12:00:00",comment = "some comment")

@PostConstruct和PreDestroy

分別注解在實(shí)例初始化后和銷毀前執(zhí)行的方法
注意,這兩個(gè)注解本身并不提供這兩個(gè)功能,需要配合相關(guān)框架或者處理類才能發(fā)揮效果

@Resource

表明注解的變量由容器注入

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看到這邊解釋注解的博客非常好。放一下原版鏈接。進(jìn)行了一些簡(jiǎn)化。 Annotation 中文譯過(guò)來(lái)就是注解、標(biāo)釋的意...
    春天的蜜蜂閱讀 1,186評(píng)論 0 0
  • 轉(zhuǎn)自https://blog.csdn.net/briblue/article/details/73824058#...
    扎Zn了老Fe閱讀 1,153評(píng)論 0 4
  • 一.注解基礎(chǔ)知識(shí) 1.注解的格式 ??最簡(jiǎn)單的注解就像下面這樣: @Entity ??@符號(hào)指示編譯器其后面的內(nèi)容...
    游戲原畫(huà)設(shè)計(jì)閱讀 294評(píng)論 0 0
  • 早餐一直占據(jù)著三餐中的最高地位,是一天營(yíng)養(yǎng)和能量的重要來(lái)源,卻是最容易被人忽視的一餐,甚至有人為了趕時(shí)間、減少熱量...
    愛(ài)昔閱讀 700評(píng)論 0 2
  • 我便有這兩個(gè)人的角色 他忙碌公事 她年少無(wú)知 而我哪個(gè)都要 我的角色便是我的心事
    一片土一條河閱讀 148評(píng)論 0 0

友情鏈接更多精彩內(nèi)容