美文网首页
2019-03-19

2019-03-19

作者: 浮雕_f6e3 | 来源:发表于2019-03-19 21:17 被阅读0次

    注解分析:

    三个注解都来自于lombok

    @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法

          @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法

            @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

    @Target注解 

    说明了Annottation所修饰的对象范围:可被用于packages,types(类,接口,枚举,Annotation类型),类型成员(方法,构造方法,成员变量,枚举值),方法参数和本地变量,

    在Annotation类型的声明中使用了target可以更加明晰其修饰的目标,取值有如下几种:1.CONSTRUCTOR:用于描述构造器

    2.FIELD:用于描述域

    3.LOCAL_VARIABLE:用于描述局部变量

    4.METHOD:用于描述方法

    5.PACKAGE:用于描述包

    6.PARAMETER:用于描述参数

    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

    注解@Retention可以用来修饰注解,是注解的注解,称为元注解。

    Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,

    这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE

    按生命周期来划分可分为3类:

    1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;

    2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;

    3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

    这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

    那怎么来选择合适的注解生命周期呢?

    首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。

    一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解

    如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;

    如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。

    注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法的名字出错时,编译器就会报错

    注解@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰

    注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候

    ControllerAdvice注解,通过此注解,可以将对于控制器的全局配置放在同一位置上。

    此注解将作用在所有注解了@requestmapping的控制器方法上。

    java.lang.SuppressWarnings是J2SE5.0中标准的Annotation之一。可以标注在类、字段、方法、参数、构造方法,以及局部变量上。

    作用:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。

    @Nullable 表示定义的字段可以为空.

    相关文章

      网友评论

          本文标题:2019-03-19

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