美文网首页spring
Spring注解原理探索(二)

Spring注解原理探索(二)

作者: ibyr | 来源:发表于2017-03-01 14:52 被阅读311次

    之 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注解原理探索(二)

        本文链接:https://www.haomeiwen.com/subject/shaqgttx.html