注解

注解

注解 ( Annotation ) 可以增强我们的java代码,同时利用反射技术可以扩充实现很多功能。它们被广泛应用于三大框架底层。传统我们通过xml文本文件声明方式,而现在最主流的开发都是基于注解方式,代码量少,框架可以根据注解去自动生成很多代码,从而减少代码量,程序更易读。例如最火爆的SpringBoot就完全基于注解技术实现。

注解的出现优化了程序的编程,减少了代码的编写。注解Annotation的标志是@ ,每个注解都有不同的功能。

注解分类

分为JDK自带注解, 元注解 和 自定义注解 (常用注解背景为深色)

JDK自带注解

  • @Override 重写方法注解 (常用)
  • @Deprecated去除已过时横线
  • @SuppressWarnings(“deprecation”) 忽略警告woring
  • @SafeVarargs jdk1.7出现,堆污染,不常用
  • @FunctionallInterface jdk1.8出现,配合函数式编程拉姆达表达式,不常用

元注解

  • @Target用来描述注解的存在位置。他的值被维护在了ElementType.class中。ElementType是一个枚举类

    参数(可传入多个):

    参数 描述
    ElementType.TYPE 应用于类的元素
    ElementType.METHOD 应用于方法级
    ElementType.FIELD 应用于字段或属性
    ElementType.ANNOTATION_TYPE 应用于注解上
    ElementType.CONSTRUCTOR 应用于构造方法
    ElementType.LOCAL_VARIABLE 应用于局部变量
    ElementType.PACKAGE 应用于包声明
    ElementType.PARAMETER 应用于方法的参数
  • @Retention用来描述注解的生命周期。值被维护在了RetentionPolicy.class

    参数(只能传入一个):

    参数 说明
    SOURCE 在源文件中有效(即源文件保留
    CLASS 在class文件中有效(即class保留)
    RUNTIME 在运行时有效(即运行时保留)
  • @Inherited允许子注解继承

  • @Documented 生成javadoc时会包含注解,不常用

  • @Repeatable注解为可重复类型注解,可以在同一个地方多次使用,不常用

自定义注解

定义格式:

@interface 注解名 {
    // 定义注解属性等...
}

属性:

例如自定义注解体中写入 String name(); 或者 int age(); ,

也可以设置默认值: String name() default "jack";

如果属性的名称是value 则使用注解的时候可以不写属性名

示例代码:

// 自定义注解 : @interface 注解名
// @Target指定注解可以出现的位置
@Target({ElementType.TYPE, ElementType.FIELD}) // 类上和属性上
// @Retention 指定注解声明周期
@Retention(RetentionPolicy.SOURCE) // 源码的时候有效
@interface Test {
    // 给注解加功能
    String name();
    // 属性设置默认值
    int age() default 22;
}

// 使用注解
@Test(name = "HelloTest")
class HelloTest {
    @Test(name = "HelloTest")
    String name;

    // @Test 不能在这里使用
    public void test() {
        System.out.println("test");
    }
}
posted @ 2020-05-25 09:55  zpk-aaron  阅读(135)  评论(0编辑  收藏  举报