概念
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。
示例:
public class UserServiceTest {
@Test
public void testLogin(){
}
@Test
public void testChu(){
}
}
注解的作用
对Java中类、方法、成员变量做标记,然后进行特殊处理,至于到底做何种处理 由业务需求来决定。 例如:JUnit框架中,标记了注解@Test的方法就可以被当成测试方法执行 ,而没有标记的就不能当成测试方法执行。
自定义注解
元注解
元注解:就是注解注解的注解
元注解有两个: @Target: 约束自定义注解只能在哪些地方使用, @Retention:申明注解的生命周期
@Target中可使用的值定义在ElementType枚举类中,常用值如下
TYPE,类,接口
FIELD, 成员变量
METHOD, 成员方法
PARAMETER, 方法参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE, 局部变量
@Retention中可使用的值定义在RetentionPolicy枚举类中,常用值如下
SOURCE: 注解只作用在源码阶段,生成的字节码文件中不存在
CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.
RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
注解的解析
注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在注解就解析出内容。
注解的解析案例
需求:注解解析的案例 分析 定义注解Book,要求如下:
- 包含属性:String value() 书名
- 包含属性:double price() 价格,默认值为 100
- 限制注解使用的位置:类和成员方法上
- 指定注解的有效范围:RUNTIME 定义BookStore类,在类上使用Book注解
定义AnnotationDemo01测试类获取Book注解上的数据
代码演示
1 自定义注解Book
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Bookk {
String value();
double price() default 100;
}
2 编写BookStore
@Bookk(value = "《情深深雨濛濛》", price = 99.9)
class BookStore{
public void test(){
}
}
3 解析注解
@Test
public void parseClass(){
// a.先得到类对象
Class c = BookStore.class;
// b.判断这个类上面是否存在这个注解
if(c.isAnnotationPresent(Bookk.class)){
//c.直接获取该注解对象
Bookk book = (Bookk) c.getDeclaredAnnotation(Bookk.class);
System.out.println(book.value());
System.out.println(book.price());
}
}