java-注解


注解(@interface)也是jdk1.5引入的。

注解作用

注解,作用其实就是做一个标记或者是标识。单独使用没有任何意义,所以注解一般都是配合使用。
常见的使用地方,比如dragger2,忽略警告的注解,继承父类的时候重写注解,butterknife里面的注解,过时注解。
经常和反射、动态代理配合使用,

应用场景

在源码级别,一般是用在APT技术上。这个技术就是说,在编译的时候,根据注解标记的类或者成员变量、方法等,动态生成一些工具类,来完成一些功能,比如目前流行的dagger2和greenDao3,都是采用的apt技术动态生成的类。在直白一点就是你写一个自定义注解,然后APT绑定你这个自定义注解,写了注解的,就生成一些其他的类来完成一些功能。
源码级别还有一个应用场景,就是做语法检查,比如一些非空检查或者必须是int类型的检查的元注解,和泛型的extends类似的感觉。

在字节码(class)阶段,一般是做字节码增强技术, 就是说,在java文件编译成字节码文件之后,修改这个字节码文件,来完成某些功能。也可以说是字节码插装技术吧。

在运行阶段,基本就是和反射配合使用,最开始的时候Butterknife就是这个方案,用过的都知道,需要在Activity里面绑定一下才能找控件,现在都换成APT技术了。

注解定义

如何自定义一个注解

//这两个放在注解上的是元注解
//Target是定义下面自定义注解的是放在类上还是属性上或者方法上等。下面列几个常用的
//TYPE是作用在类上
//FIELD是作用在属性上
//METHOD作用在方法上
//PARAMETER作用在参数上
//注意,这个Target可以写多个,也就是即使在类上用,又是在方法上用。
@Target(ElementType.TYPE,ElementType.METHOD)
//这个Retention是定义这个注解的生命周期,这个比较少一共就三个
//    SOURCE,这个是源码阶段就结束了 使用javac指令,注解就没了
//    CLASS,//这个是编译时存在,运行时不存在了,javac之后的字节码还在,但是运行的时候就不在了
//    RUNTIME;//这个是运行时还存在。一直保留到运行时期。
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation {
    String value() default "";
    int id() default 0;
}

注解其实没什么太多内容,其实注解基本就是配合其他技术使用完成一些功能,基本都是为了解耦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值