Spring注解原理探索(二)

之 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í)別注解

[未完]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 本文章涉及代碼已放到github上annotation-study 1.Annotation為何而來(lái) What:A...
    zlcook閱讀 29,754評(píng)論 15 116
  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和...
    九尾喵的薛定諤閱讀 3,413評(píng)論 0 2
  • 整體Retrofit內(nèi)容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李頭閱讀 8,816評(píng)論 4 31
  • 為理想殉葬 綠色牧羊人/文 天空中的雪花 為逝去的生命哀傷 昨天的我已經(jīng)死亡 成為遙遠(yuǎn)理想的殉葬 青春作厚重的棺...
    綠色牧羊人閱讀 474評(píng)論 0 0

友情鏈接更多精彩內(nèi)容