如何自定义一个注解?首先注解一个特殊的类,类中可以定义一些属性,这些属性的值,可以通过在被修饰的方法或类等上进行赋值。
1.自定义注解的目标:
原来写在配置文件中的信息,可以通过注解描述。这样可以通过注解来告诉类如何运行
定义Annotation使用@interface关键字, 如下所示:
public @interface MyAnnotation {
}
2.配置文件中的信息,在注解中采用属性来描述,注解中的属性类型只能是如下类型:
String类型,如String name();
8种基本数据类型
Class类型
枚举类型
注解类型,此类型功能类似于xml配置文件中标签中在套一个标签.通过注解中嵌套另外一个注解,可以实现xml文件中类似下面的复杂配置。
<a>
<b> </b>
</a>
以上类型的一维数组
3.注解中的每种数据描述都使用如下格式:
Type 属性名(); 如String name();
4.带有默认值的属性,格式如下:
String name() default "aaa" ;
5.特殊属性value,如果注解中带一个名为value的属性,那么使用注解是可以省略"value="部分, 如@MyAnnotation("xxx");
6.特殊属性value[],如果注解中带有一个名为value的数组属性,那么注解是也可以省略"value="部分,如:
@MyAnnotation({"aaa", "bbb"})
下面是定义一个MyAnnotation注解及使用
package cn.itcast.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME) //元注解,注解的注解
public @interface MyAnnotation {
String name() default "aaa" ; //基本数据类型
Class clazz(); //Class类型
Gender gender() default Gender.FEMALE; //枚举类型
MyAnnotation2 an2(); //注解类型
double[] num() default{1, 2}; //一维数组类型
}
@MyAnnotation1(name="lisi", gender=Gender.FEMAIL, clazz=String.class, an2=@MyAnnotation2(age=31), num={2,4})
public void method1(String name, Gender gender, Class clazz, int age){
}
7.当注解只有一个属性,且属性名为value时,方法上添加此注解可以不加“value=”
public @interface MyAnnotation3 {
int value() default 32;
}
@MyAnnotation3(33)
public void method3(){
//注解中可以省略"value="部分,即@MyAnnotation3(33)可写成@MyAnnotation(33)
}
当注解含有多个属性,且其中有个属性为value, 注解中添加value属性值不能省略value=部分. 当属性中只有一个数组属性,且为属性名为value, value=部分也可以省略。
public @interface MyAnnotation3 {
String[] value() default {"aa", "bb"};
}
@MyAnnotation4({"dd", "ee"})
public void method4(){
}