JAVA中怎样创建属于我自己的注解
项目中需要实现的业务逻辑非常复杂,有时候需要用到注解来实现更灵活的编码方式,但框架实现的注解不够用怎么办?那就自己写一个吧。
创建一个注解
创建一个类型为@interface
的类,同时使用@Target
和@Retention
注解进行修饰,那么一个注解就定义完成了,如下所示:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
}
@Target
用来描述该自定义注解应该在哪里使用,如 方法、类、包、字段等等;
@Retention
用来描述该自定义注解的生命周期,有三种选择:RUNTIME
、CLASS
、SOURCE
。若要该自定义注解在程序运行中发挥效果,那么使用RUNTIME
;如果希望该自定义注解仅在程序编译过程中发挥效果,那么使用CLASS
;若该注解仅用于编译前,如检查规范、文档说明等,则使用SOURCE
为注解增加属性
光是创建了一个注解是远远不够的,还需要为注解标注一个状态或设置一个值,以便在业务中参与逻辑实现。如下:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
String fieldname();
// 还可以设置默认值
String fieldname2() default "默认值";
}
为注解增加预设值
有些场景下希望注解提供一个预设值以便使用者来设置它。如下:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
String fieldname();
// 还可以设置默认值
String fieldname2() default "默认值";
String thisIsStaticFinalField1 = "这是预设值1";
String thisIsStaticFinalField2 = "这是预设值2";
String thisIsStaticFinalField3 = "这是预设值3";
}
在接口中不能定义方法体。
在接口中定义并赋值的属性都是 static final 修饰的。
使用方法如下:
@MyAnnotation(fieldname = MyAnnotation.thisIsStaticFinalField1)
void method(String name){
if(MyAnnotation.thisIsStaticFinalField2.equals(name)){
System.out.println("接口中预设值的调用方法");
System.out.println(MyAnnotation.thisIsStaticFinalField3);
}
}
如有错误,欢迎指出,谢谢