Spring注解原理探索(二)

之 Java中如何自定义注解

1.先看注解定义示例

@Override 源码定义:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

使用@interface 表示这是一个注解类。自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。
标注 @Target 元注解,声明@Override 的作用地方为METHOD。
标注 @Retention 元注解,指明@Override 被保留的级别-源码级别,编译的时候就被忽略。

** 引申1:注解定义格式:public @interface 注解名 {定义体} **
** 引申2:定义注解时,不得继承其他的注解或者接口。 **

SpringMVC 的 @RequestMapping 源码示例:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)  // 注解一直保持到VM运行期,被反射读取。
@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可供选择的参数有:
name, value, path, method, params, headers, consumes, produces。

  • 注解的每个参数对应着 @RequestMapping 类中的方法名。
  • 每个参数指定一个默认值(default)。

** 引申3:注解类体中,每一个方法实际上声明了一个注解参数。方法名就是参数名,返回值类型就是参数类型。 **

** 引申4:注解参数支持的类型:8种基本类型(byte,short,int,long,float,double,char,boolean),String类型,Class类型,enum类型,Annotation类型,以上所有类型的数组。 **

** 引申5:访问修饰权限:public或者默认default。 **

** 引申6:注解元素必须要有默认值。在定义注解的默认值中指定,或者在使用注解的时候指定。非基本类型不能默认null。 **

当自定义注解类之后,便可以在类(ElementType.TYPE)、方法(ElementType.METHOD)上标注 @RequestMapping。

那怎样做才能让注解被Java程序所运行?
请参考:Spring注解原理探索(三)之 Java如何识别注解

[未完]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,587评论 19 139
  • 本文章涉及代码已放到github上annotation-study 1.Annotation为何而来 What:A...
    zlcook阅读 29,431评论 15 116
  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和...
    九尾喵的薛定谔阅读 8,488评论 0 2
  • 整体Retrofit内容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李头阅读 12,242评论 4 31
  • 为理想殉葬 绿色牧羊人/文 天空中的雪花 为逝去的生命哀伤 昨天的我已经死亡 成为遥远理想的殉葬 青春作厚重的棺...
    绿色牧羊人阅读 3,064评论 0 0