java注解快速入门 一步到位

332 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

什么是注解?

注解是一种可以被添加到java代码中的一种元数据,类、方法、参数、变量以及包都可以用注解来修饰,对于所修饰的代码并没有直接的影响。

注解的作用?

1.编写文档:通过代码里标识的元数据生成帮助文档。

2.代码分析:通过代码里标识的元数据对代码进行分析,跟踪代码依赖性,实现替代配置文件功能。(反射实现)

3.编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

如何自定义注解?

例如:新建一个注解TestAnnotation.java

// TestAnnotation.java
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestAnnotation {

    String val1() default "";

    String val2() default "";

}

参数说明

  • @Target

作用:用于指定被修饰的Annotation可以放置的位置。

// 修饰接口、类、枚举、注解
@Target(ElementType.TYPE)
// 修饰字段、枚举的常量
@Target(ElementType.FIELD)
// 修饰方法
@Target(ElementType.METHOD)
// 修饰方法参数
@Target(ElementType.PARAMETER)
// 修饰构造函数
@Target(ElementType.CONSTRUCTOR)
// 修饰局部变量
@Target(ElementType.LOCAL_VARIABLE)
// 修饰注解
@Target(ElementType.ANNOTATION_TYPE)
// 修饰java包
@Target(ElementType.PACKAGE)
// 修饰参数声明
@Target(ElementType.TYPE_PARAMETER)
// 修饰适用类型
@Target(ElementType.TYPE_USE)
// 当然也是允许存在多个的,例如:
@Target({ElementType.TYPE, ElementType.METHOD})
  • @Retention

作用:定义注解的保留策略,即要保留带注解类型的注解多长时间。

// 注解只存在于源码之中,在class字节码文件中是不包含的
@Retention(RetentionPolicy.SOURCE)

// 默认保留策略,注解在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.CLASS)

// 注解在class字节码文件中存在,运行时可通过反射获取
@Retention(RetentionPolicy.RUNTIME)
  • @Documented

如果一个注解@test,被@Documented标注,那么被@test修饰的类,生成文档时,javadoc中会显示@test。
在缺省情况下是不出现在javadoc中的。

  • @Inherited

作用:注解类型是自动继承的。
如果在接口上使用该注解,则其实现类不会继承这个注解。
如果父类上使用了该注解,则其子类也不会继承这个注解。

  • @Native

作用:修饰成员变量,则表示这个变量可以被本地代码引用,常常被代码生成工具使用。(不常使用)

  • @Repeatable

作用:被修饰后可以在同一个地方使用多次