【spring 注解】第1篇:Java基础注解学习

注解是什么

注解的定义

Java注解通过@interface关键字定义

public @interface MyAnnotation {
}

那么注解到底是个什么东西呢?在日常生活中,往往会给关系要好的朋友起一个昵称或者绰号,比如说雷军,网络上尊称雷布斯,可以理解为雷布斯就是雷军的一个标签,并且雷布斯这个标签有特定的含义。那么注解在我们的java代码中就起到了一个标签的作用。

注解的属性

注解的属性也叫做成员变量。注解有且只有成员变量。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。但是在注解中定义属性时它的类型必须是 Java 基本数据类型、类、接口、注解及它们的数组

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    int id();
    String info();
}

在使用注解时可以重复为注解属性赋新值,如下:

@MyAnnotation(id = 1,info = "hello annotation")
public class AnnoDemo {
}

注解属性可以有自己的默认值,使用default关键字声明;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    int id() default 0;
    String info() default "";
}

另外如果注解在声明时使用了value作为属性名称,应用这个注解时可以直接将属性值填写到括号内。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Rename {
    String value();
}

上面带有value属性的注解可以这样使用:

@MyAnnotation(id = 1,info = "hello annotation")
public class AnnoDemo {
    @Rename("hello")
    private String name;
}

元注解

在介绍注解属性的时候,我们已经开始使用了部分注解,比如@Target@Retention,这些东西是什么呢?我们称之为元注解。

元注解是什么

元注解是一种特殊的注解,它能够应用到其它的普通注解上面,目的就是给其他普通的注解进行解释说明。

元注解的类型

  • @Retention:当一个普通注解被@Retention注解标识时,它限定了这个普通注解的生命周期。

    1. RetentionPolicy.SOURCE: Java源码期起作用,编译期被丢弃;
    2. RetentionPolicy.CLASS: 只在编译期起作用,单不会被加载到JVM中;
    3. RetentionPolicy.RUNTIME: 它会被加载进入到JVM中,在Java程序运行的生命周期中都起作用;
  • @Target:当一个普通注解被@Target注解标识时,这个普通注解就被限定了在那些地方起作用。比如被限定只在java的类上起作用、或者方法上起作用。

    1. ElementType.TYPE: 对注解、类、接口、枚举进行注解;
    2. ElementType.FIELD: 对属性进行注解;
    3. ElementType.METHOD: 对方法进行注解;
    4. ElementType.PARAMETER: 对形参进行注解;
    5. ElementType.CONSTRUCTOR: 对构造器进行注解;
    6. ElementType.LOCAL_VARIABLE: 对局部变量进行注解;
    7. ElementType.ANNOTATION_TYPE: 对注解进行注解;
    8. ElementType.PACKAGE: 对一个包进行注解;
    9. ElementType.TYPE_PARAMETER: 对引用类型参数注解(JDK1.8新增);
    10. ElementType.TYPE_USE: 对类型进行注解(JDK1.8新增);
  • @Documented: 说明该注解将被包含在javadoc中。
  • @Inherited: 如果一个父类被@Inherited修饰过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了父类的注解。
  • @Repeatable: 被@Repeatable修饰的注解可以重复使用。

注解的应用场景

    原文作者:一只小小鸟
    原文地址: https://segmentfault.com/a/1190000015888511
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞