Java中的高级技术——注解

28 阅读2分钟

注解概述

自定义注解

注意这里的属性名后面都得加上()

定义在注解类中的属性都要在标注解的方法、类... 上写出所有的属性对应的值


注意这里还有个特殊的:

如下:

特殊之处就是如果注解中只有一个属性,那就可以直接写值,省略了属性名和等号。

还有一种情况就是:如果注解中有多个注解,但除了那个value属性,其他的属性都有默认值default,那也可以省略。

注解的原理

将注解反编译成class文件之后,会发现注解本质上是一个接口,而且所有的接口都继承java提供的注解接口类Annotation。注解中定义的属性实际上都是一些所谓的抽象方法

比如你在用@MyTest1这个注解的时候,实际上就相当于这个代码在创建这个接口的实现类对象。

总结:

● 注解本质是一个接口,Java中所有注解都是继承了Annotation接口的。

● @注解(...):其实就是一个实现类对象,实现了该注解以及Annotation接口。

注解的作用

• 对java中类、方法、成员变量做标记,然后进行特殊处理。

● 例如:JUnit框架中,标记了注解@Test的方法就可以被当成测试方法

执行,而没有标记的就不能当成测试方法执行

元注解

概念就是:注解 注解 的注解。(没有打错字)

所以可以看出元注解就是放在注解上面的注解

我们只需要认识这两个注解:

下面这个保留周期-就很像泛型,泛型就是只工作在编译阶段,编译完之后就擦除了。我们一般都是用第三个RUNTIME一直保留(一直活着)。

注解的解析

代码实现:

成功拿到 类上注解中的信息——解析注解

成功拿到 方法上注解中的信息——解析注解

过程中用到的API有 :

注解的作用和应用场景

作用在之前已经讲过:就是对程序做特殊标记,以方便别人针对性的处理。

应用场景:(开发出一个模拟版Junit框架)

我们可以通过这一段写在main函数中的代码来模拟junit的启动:

所以可以看出,成功实现加了注解就跑,不加注解就不跑