一、注解作用
-
标记
-
方法重写约束 @Override
-
函数式接口约束。 @FunctionalInterface
-
现今最牛逼的框架技术多半都是在使用注解和反射。都是属于框架的底层基础技术
自定义注解的格式:
修饰符 @interface 注解名{
// 注解属性
}
@Book
@MyTest
public class MyBook {
@Book
@MyTest
private MyBook(){
}
@Book
@MyTest
public static void main(@MyTest String[] args) {
@MyTest
@Book
int age = 12;
}
}
@interface Book{
}
@interface MyTest{
}
二、注解的属性
属性的格式
- 格式1:数据类型 属性名();
- 格式2:数据类型 属性名() default 默认值;
注解可以有属性,属性名必须带()
在用注解的时候,属性必须赋值,除非这个属性有默认值!!
@MyBook(name="《精通Java基础》",authors = {"播仔","Dlei","播妞"} , price = 99.9 )
public class AnnotationDemo01 {
@MyBook(name="《精通MySQL数据库入门到删库跑路》",authors = {"小白","小黑"} ,
price = 19.9 , address = "北京")
public static void main(String[] args) {
}
}
// 自定义一个注解
@interface MyBook{
String name();
String[] authors(); // 数组
double price();
String address() default "广州";
}
注解的特殊属性
注解的特殊属性名称:value
value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写!!
可以用于写跳转地址之类的。
//@Book(value = "/deleteBook.action")
//@Book("/deleteBook.action")
//@Book(value = "/deleteBook.action" , age = 12)
//@Book("/deleteBook.action")
public class AnnotationDemo01{
}
@interface Book{
String value();
int age() default 10;
}
三、元注解
元注解是用来注解自定义注解的
元注解有两个:
@Target:约束自定义注解只能在哪些地方使用,
-- 但是默认的注解可以在类,方法,构造器,成员变量,... 使用。
@Retention:申明注解的生命周期
-- 申明注解的作用范围:编译时,运行时。
@Target
- 作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。
- 可使用的值定义在ElementType枚举类中,常用值如下
TYPE,类,接口
FIELD, 成员变量
METHOD, 成员方法
PARAMETER, 方法参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE, 局部变量
@Retention
- 作用:用来标识注解的生命周期(有效存活范围)
* 可使用的值定义在RetentionPolicy枚举类中,常用值如下
* SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在
* CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.
* RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
四、注解的解析(了解)
注解有哪些属性数据,这都需要进行注解的解析。
五、注解模拟Junit框架
分析:
(1)定义一个自定义注解MyTest.
- 只能注解方法。
- 存活范围一直都在。
(2)定义若干个方法,只要有@MyTest注解的方法就能被触发执行!!
- 没有这个注解的方法不能执行!!