Android注解分类

注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。

本篇文章内容来自于
Android高级进阶 顾浩鑫

前言

应用:

  • Android Support Library推出一个注解支持库Support Annotation
  • REST网络请求函数库Retrofit使用运行时注解
  • 依赖注入函数库Dagger2使用编译时注解

目录

  1. 什么是注解
  2. 注解分类
    --2.1 标准注解(Java API中默认定义的注解)
    ----2.1.1 编译相关注解(编译相关的注解是给编译器使用的)
    ----2.1.2 资源相关注解(可无视)
    ----2.1.3 元注解(用来定义和实现注解的注解)
    --2.2 运行时注解(配合反射使用)
    --2.3 编译时注解【待补】

1. 什么是注解

注解是在源代码中插入的标签,这些标签在后面的编译或者运行中起到某种作用。

每个注解必须通过注解接口@interface进行声明,接口的方法对应着注解的元素。

2. 注解分类

2.1 标准注解

Java API中默认定义的注解称为标准注解,它们定义在java.lang、java.lang.annotation、java.annotation中。

根据使用场景不同,可分为

  • 编译相关注解
  • 资源相关注解
  • 元注解

2.1.1 编译相关注解

编译相关的注解是给编译器使用的。

@Override:编译器会检查被注解的方法是否真的重载了一个来自父类的方法、如果没有,编译器将会给出错误提示。
@Deprecated:可以用来修饰任何不再鼓励使用或已被弃用的属性、方法等。
@SuppressWarnings:可用于除了包之外的其他声明项中,用来抑制某种类型的警告。
@SafeVarargs:用于方法和构造函数,用来断言不定长参数可以安全使用。
@Generated:一般是给代码生成工具使用,用来表示这段代码不是开发者手动编写的,而是工具生成的。被@Generated修饰的代码一般不建议手动修改它。
@FunctionalInterface:用来修饰接口,表示对应的接口是带单个方法的函数式接口。

2.1.2 资源相关注解

资源相关的注解有四个,一般用在JavaEE领域,Android开发中应该不会用到。

@PostConstruct:用在控制对象生命周期的环境中,例如Web容器和应用服务器,表示在构造函数之后应该立即调用被该注解修饰的方法。
@PreDestory:表示在删除一个被注入的对象之前应该立即调用被该注解修饰的方法。
@Resource:用于Web容器的资源注入,表示单个资源。
@Resources:用于Web容器的资源注入,表示一个资源数组。

2.1.3 元注解

元注解,就是用来定义和实现注解的注解。
总共有五种。

1⃣️@Target 用来指定注解所适用的对象范围
如果一个注解的定义没有使用@Target修饰,那么它可以用在除了TYPE_USE和TYPE_PARAMEYER之外的其他类型中。

@Target参数取值

//注解参数取值是一个ElementType类型的数组。
元素类型    适用于
ANNOTATION_TYPE 注解类型声明
CONSTRUCTOR 构造函数
FIELD   实例变量
LOCAL_VARIABLE  局部变量
METHOD  方法
PACKAGE 包
PARAMETER   方法参数或者构造函数的参数
TYPE    类(包含enmu)和接口(包含注解类型)
TYPE_PARAMETER  类型参数
TYPE_USER   类型的用图

使用案例

@Target({ElementType.TYPE,ElementType.PACKAGE})
public @interface CrashReport

2⃣️@Retention:用来指明注解的访问范围
也就是在什么级别保留注解
未指定类型时,默认是CLASS类型。

参数取值

源码级注解:
在定义注解接口时,使用@Retention(RetentionPolicy.SOURCE)修饰的注解,
该类型的注解信息只会保留在.java源码里,源码经过编译后,注解信息会被丢弃,不会保留在编译好的.class文件中。

编译时注解:
在定义注解接口时,使用@Retention(RetentionPolicy.CLASS)修饰的注解,
该注解的注册信息会保留在.java源码里和.class文件里,在执行的时候,会被Java虚拟机丢弃,不会加载到虚拟机种。

运行时注解:
在定义注解接口时,使用@Retention(RetentionPolicy.RUNTIME)修饰的注解,
Java虚拟机在运行期也保留注解信息,可以通过反射机制读取注解的信息(.java源码,.class文件和执行的时候都有注解的信息)

3⃣️@Documented:表示被修饰的注解应该被包含在被注解项的文档中。
例如用JavaDoc生成的文档

4⃣️@Inherited:表示该注解可以被子类继承的。

5⃣️@Repeatable:表示这个注解可以在同一个项上面应用多次
不过这个注解是在Java8中才引入的,前面四个元注解都是在Java5中就已经引入的。

2.2 运行时注解

定义运行时注解,只需要在声明注解时指定@Retention(RetentionPolicy.RUNTIME)即可。

运行时注解一般和反射机制配合使用,相比编译时注解性能比较低,但灵活性好,实现起来比较简答。

2.3 编译时注解

编译时注解能够自动处理Java源文件并生成更多的源码、配置文件、脚本或其他可能想要生成的东西。
这些操作是通过注解处理器完成的。

Java编译器集成了注解处理、通过在编译期间调用javac -processor命令可以调起注解处理器,它能够允许我们实现编译时注解的功能,从而提高函数库的性能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,914评论 25 707
  • 本文章涉及代码已放到github上annotation-study 1.Annotation为何而来 What:A...
    zlcook阅读 29,132评论 15 116
  • 最近我又读了一本很不错的书,那就是万维钢老师的《万万没想到》——用理工科思维理解世界,作为一个文科生,我对这本书产...
    烟花瞬间阅读 2,347评论 7 5
  • 大二寒假出去打工,在超市卖了半个假期的鱼。每天朝七晚九,拉鱼,杀鱼,卖鱼。半个月下来,挣了1400块跟一手...
    ACE木易阅读 301评论 0 0
  • —“做自己会没有朋友吗?” ―“做自己,能吸引喜欢的人; 不做自己,你只能喜欢别人。” 最近发生了不少的事情,心情...
    sherry_18阅读 396评论 0 2