概念:
能夠添加到Java代碼里面的語(yǔ)法元數(shù)據(jù)帚湘。類(lèi)言缤,方法货抄,參數(shù)送讲,包都可以被注解辙芍,可以將信息元數(shù)據(jù)和程序元數(shù)據(jù)進(jìn)行關(guān)聯(lián)踏志。
作用:
(1)標(biāo)記逢捺,告訴編譯器一些信息丧没。
(2)編譯時(shí)的動(dòng)態(tài)處理人弓,如動(dòng)態(tài)生成代碼沼死。
(3)運(yùn)行時(shí)動(dòng)態(tài)處理,如得到注解信息崔赌。
注解的分類(lèi):
(1)標(biāo)準(zhǔn)注解:
Override(重寫(xiě)函數(shù)),
SupressWarning(忽略某些Warning),
Deprecated(不鼓勵(lì)使用意蛀,有更好的方式)耸别;
(2)元Annotation: 是用來(lái)指定Annotation的Annotation;
@Retention;@Documented;@Inherited;@Target;
@Retention:保留時(shí)間,可選值,SOURCE(源碼時(shí))县钥,RUNTIME(運(yùn)行時(shí))秀姐,CLASS(編譯時(shí))。默認(rèn)CLASS,SOURCE 大都為 Mark Annotation若贮,這類(lèi) Annotation 大都用來(lái)校驗(yàn)省有,比如 Override, SuppressWarnings。
@Documented:是否保留到Javadoc文檔時(shí)谴麦。
@Target:可以用來(lái)修飾哪些程序元素蠢沿,可選值,METHOD,CONSTRUCTOR,FILED
@Inherited:表示是否可以繼承匾效,為false舷蟀。
** (3)自定義Annotation:** 表示根據(jù)自己的需要自定義Annotation,自定義時(shí)需要用到元Annotation。
其他分類(lèi)方法:源代碼時(shí)面哼,編譯時(shí)野宜,運(yùn)行時(shí)Annotation;
運(yùn)行時(shí) Annotation 解析(@Target=Method);
(1)獲取class:Class.foName("*******");
(2)獲取Method:clazz.getDeclaredMethod(param.class);
(3)獲取注解:Mehod.getAnnotation()
(3)調(diào)用注解函數(shù):Annotation.version()
編譯時(shí) Annotation 解析:
編譯時(shí) Annotation 指 @Retention 為 CLASS 的 Annotation,甴編譯器自動(dòng)解析魔策。
(1)自定義類(lèi)集成自 AbstractProcessor
(2)重寫(xiě)其中的 process 函數(shù)