??項(xiàng)目中需要實(shí)現(xiàn)的業(yè)務(wù)邏輯非常復(fù)雜,有時(shí)候需要用到注解來實(shí)現(xiàn)更靈活的編碼方式,但框架實(shí)現(xiàn)的注解不夠用怎么辦耳标?那就自己寫一個(gè)吧。
創(chuàng)建一個(gè)注解
創(chuàng)建一個(gè)類型為@interface
的類邑跪,同時(shí)使用@Target
和@Retention
注解進(jìn)行修飾次坡,那么一個(gè)注解就定義完成了,如下所示:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
}
@Target
用來描述該自定義注解應(yīng)該在哪里使用画畅,如 方法砸琅、類、包轴踱、字段等等症脂;
@Retention
用來描述該自定義注解的生命周期,有三種選擇:RUNTIME
、CLASS
诱篷、SOURCE
壶唤。若要該自定義注解在程序運(yùn)行中發(fā)揮效果,那么使用RUNTIME
棕所;如果希望該自定義注解僅在程序編譯過程中發(fā)揮效果闸盔,那么使用CLASS
;若該注解僅用于編譯前橙凳,如檢查規(guī)范、文檔說明等笑撞,則使用SOURCE
為注解增加屬性
光是創(chuàng)建了一個(gè)注解是遠(yuǎn)遠(yuǎn)不夠的岛啸,還需要為注解標(biāo)注一個(gè)狀態(tài)或設(shè)置一個(gè)值,以便在業(yè)務(wù)中參與邏輯實(shí)現(xiàn)茴肥。如下:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
String fieldname();
// 還可以設(shè)置默認(rèn)值
String fieldname2() default "默認(rèn)值";
}
為注解增加預(yù)設(shè)值
有些場(chǎng)景下希望注解提供一個(gè)預(yù)設(shè)值以便使用者來設(shè)置它坚踩。如下:
@Target(ElementType.XXXX)
@Retention(RetentionPolicy.XXXX)
public @interface MyAnnotation {
String fieldname();
// 還可以設(shè)置默認(rèn)值
String fieldname2() default "默認(rèn)值";
String thisIsStaticFinalField1 = "這是預(yù)設(shè)值1";
String thisIsStaticFinalField2 = "這是預(yù)設(shè)值2";
String thisIsStaticFinalField3 = "這是預(yù)設(shè)值3";
}
在接口中不能定義方法體。
在接口中定義并賦值的屬性都是 static final 修飾的瓤狐。
使用方法如下:
@MyAnnotation(fieldname = MyAnnotation.thisIsStaticFinalField1)
void method(String name){
if(MyAnnotation.thisIsStaticFinalField2.equals(name)){
System.out.println("接口中預(yù)設(shè)值的調(diào)用方法");
System.out.println(MyAnnotation.thisIsStaticFinalField3);
}
}
如有錯(cuò)誤瞬铸,歡迎指出,謝謝