注解概述
自定义注解
注意这里的属性名后面都得加上()
定义在注解类中的属性都要在标注解的方法、类... 上写出所有的属性对应的值
注意这里还有个特殊的:
如下:
特殊之处就是如果注解中只有一个属性,那就可以直接写值,省略了属性名和等号。
还有一种情况就是:如果注解中有多个注解,但除了那个value属性,其他的属性都有默认值default,那也可以省略。
注解的原理
将注解反编译成class文件之后,会发现注解本质上是一个接口,而且所有的接口都继承java提供的注解接口类Annotation。注解中定义的属性实际上都是一些所谓的抽象方法
比如你在用@MyTest1这个注解的时候,实际上就相当于这个代码在创建这个接口的实现类对象。
总结:
● 注解本质是一个接口,Java中所有注解都是继承了Annotation接口的。
● @注解(...):其实就是一个实现类对象,实现了该注解以及Annotation接口。
注解的作用
• 对java中类、方法、成员变量做标记,然后进行特殊处理。
● 例如:JUnit框架中,标记了注解@Test的方法就可以被当成测试方法
执行,而没有标记的就不能当成测试方法执行
元注解
概念就是:注解 注解 的注解。(没有打错字)
所以可以看出元注解就是放在注解上面的注解
我们只需要认识这两个注解:
下面这个保留周期-就很像泛型,泛型就是只工作在编译阶段,编译完之后就擦除了。我们一般都是用第三个RUNTIME一直保留(一直活着)。
注解的解析
代码实现:
成功拿到 类上注解中的信息——解析注解
成功拿到 方法上注解中的信息——解析注解
过程中用到的API有 :
注解的作用和应用场景
作用在之前已经讲过:就是对程序做特殊标记,以方便别人针对性的处理。
应用场景:(开发出一个模拟版Junit框架)
我们可以通过这一段写在main函数中的代码来模拟junit的启动:
所以可以看出,成功实现加了注解就跑,不加注解就不跑