一、元注解
什么是元注解?
在自定义注解时,需要使用的注解叫元注解,使用在注解上的注解就是元注解。
常用的元注解有:
- @Target
- @Retention
- @Documented
1. @Target
自定义注解时规定该注解的适用范围,不设置默认所有范围都可以使用
有如下范围:
ElementType.TYPE (可以使用在类上)
ElementType.FIELD, (可以给属性进行注解)
ElementType. METHOD, (可以给方法进行注解)
ElementType. PARAMETER, (可以给一个方法内的参数进行注解)
ElementType.CONSTRUCTOR, (可以给构造方法进行注解)
ElementType.LOCAL_VARIABLE, (可以给局部变量进行注解)
ElementType.ANNOTATION_TYPE, (可以给一个注解进行注解)
ElementType.PACKAGE, (可以给一个包进行注解)
jdk1.8新特性:
ElementType.TYPE_PARAMETER, (可以使用在自定义类型参数,如枚举)
ElementType.TYPE_USE (可以使用在使用类型的任意语句中)
一般常用:
- TYPE,可以使用在类上
- FIELD,使用在属性上
- METHOD,使用方法上
- PARAMETER, 使用在方法参数上
- CONSTRUCTOR, 使用在构造方法上
2.@Retention
自定义注解时规定该注解什么时候生效 不设置默认在源码时生效
有如下种类:
RetentionPolicy.SOURCE: 源码时有效
RetentionPolicy.CLASS: 字节码时
RetentionPolicy.RUNTIME: 运行时有效。【采用的最多】
3.@Documented
自定义注解时该注解在生成API文档时可以存在
生成API文档:
二、自定义注解
如何自定义注解
注解格式
@interface 注解名{
数据类型 属性名();
}
注解内可以使用的数据类型有:
- 基本数据类型,
- 字符串类型,
- 枚举类型,
- 注解类型,
- 以及上面这些类型的数组类型。
package demo1;
import kejian2.aaa.MyEnum;
import kejian2.bbb.My;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Myzhujie {
int age();//基本数据类型
String name();//字符串类型
MyEnum address();//枚举类型
My my();//注解类型
int[] ages();
String[] names() default {"world"};
MyEnum[] address2();
My[] mys();
}
如果属性定义好后,在使用该注解是需要指定属性的值
package demo1;
import kejian2.bbb.My;
//如果属性为数组类型,给数组类型赋值时如果只有一个值那么可以省略{}
//如果该注解中只使用value属性,那么value属性名可以省略。
@Myzhujie(age = 18, name = "阿娇", address = MyEnum.dongjing,
my = @My, ages = {18, 20, 22}, names = "aaa",
address2 = {MyEnum.dongjing, MyEnum.dongguan}, mys = @My)
public class Text {
public void show() {
System.out.println("你好!");
}
}