之 Java中如何自定義注解
1.先看注解定義示例
@Override 源碼定義:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
使用@interface 表示這是一個(gè)注解類。自動(dòng)繼承了java.lang.annotation.Annotation接口,由編譯程序自動(dòng)完成其他細(xì)節(jié)。
標(biāo)注 @Target 元注解,聲明@Override 的作用地方為METHOD。
標(biāo)注 @Retention 元注解,指明@Override 被保留的級(jí)別-源碼級(jí)別,編譯的時(shí)候就被忽略。
** 引申1:注解定義格式:public @interface 注解名 {定義體} **
** 引申2:定義注解時(shí),不得繼承其他的注解或者接口。 **
SpringMVC 的 @RequestMapping 源碼示例:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) // 注解一直保持到VM運(yùn)行期,被反射讀取。
@Documented
@Mapping // SpringMVC定義的元注解,暫忽略此。
public @interface RequestMapping {
String name() default "";
@AliasFor("path") // SpringMVC中定義的別名注解。
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
用法示例:
@RequestMapping(value="/user", methods=RequestMethod.GET),
@RequestMapping可供選擇的參數(shù)有:
name, value, path, method, params, headers, consumes, produces。
- 注解的每個(gè)參數(shù)對(duì)應(yīng)著 @RequestMapping 類中的方法名。
- 每個(gè)參數(shù)指定一個(gè)默認(rèn)值(default)。
** 引申3:注解類體中,每一個(gè)方法實(shí)際上聲明了一個(gè)注解參數(shù)。方法名就是參數(shù)名,返回值類型就是參數(shù)類型。 **
** 引申4:注解參數(shù)支持的類型:8種基本類型(byte,short,int,long,float,double,char,boolean),String類型,Class類型,enum類型,Annotation類型,以上所有類型的數(shù)組。 **
** 引申5:訪問修飾權(quán)限:public或者默認(rèn)default。 **
** 引申6:注解元素必須要有默認(rèn)值。在定義注解的默認(rèn)值中指定,或者在使用注解的時(shí)候指定。非基本類型不能默認(rèn)null。 **
當(dāng)自定義注解類之后,便可以在類(ElementType.TYPE)、方法(ElementType.METHOD)上標(biāo)注 @RequestMapping。
那怎樣做才能讓注解被Java程序所運(yùn)行?
請(qǐng)參考:Spring注解原理探索(三)之 Java如何識(shí)別注解
[未完]