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

注解是什么

注解的定义

Java注解经过@interface关键字定义java

public @interface MyAnnotation {
}

那么注解究竟是个什么东西呢?在平常生活中,每每会给关系要好的朋友起一个昵称或者绰号,好比说雷军,网络上尊称雷布斯,能够理解为雷布斯就是雷军的一个标签,而且雷布斯这个标签有特定的含义。那么注解在咱们的java代码中就起到了一个标签的做用。数组

注解的属性

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

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

在使用注解时能够重复为注解属性赋新值,以下:code

@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,这些东西是什么呢?咱们称之为元注解。get

元注解是什么

元注解是一种特殊的注解,它可以应用到其它的普通注解上面,目的就是给其余普通的注解进行解释说明。源码

元注解的类型

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

    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修饰的注解能够重复使用。

注解的应用场景

相关文章
相关标签/搜索