元注解知识小结

元注解知识小结

注解官方解释:

从 JDK5 开始,Java 增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。

元注解

元注解(Meta-Annotation)又叫做注解的注解,用于描述其他注解的行为,其实就是对该注解的一些解释说明。

  • 例如它们的作用范围、生存周期等。
  • 例如我们买的演唱会门票,上面标注的有时间、地点、座位等。

常见的元注解有:

  • @Target(指定注解作用范围)
  • @Retention(指定注解的生命周期)
  • @Documented(指定是否生成 Javadoc)
  • @Inherited(指定是否允许子类继承)

@Target 注解

@Target 表示该注解作用的位置,里面的变量是一个枚举。

  • 限定 这个注解可以标注到类、方法、字段、参数等的哪些位置。它的参数是 ElementType 枚举。
  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:作用在包上面

表格描述:

ElementType作用范围常见应用
TYPE类、接口、枚举@Component@Service
FIELD成员变量@Autowired@Value
METHOD方法@PostConstruct@RequestMapping
PARAMETER方法参数@RequestParam@PathVariable
CONSTRUCTOR构造方法用于依赖注入
LOCAL_VARIABLE局部变量一般不用
ANNOTATION_TYPE另一个注解自定义注解
PACKAGEpackage-info.java

写法示例:

@Target({ElementType.METHOD, ElementType.FIELD})  // 只能作用于方法和字段
public @interface MyAnnotation {
}

@Retention 注解

@Retention 表示该注解的使用时间,里面的变量是一个枚举。

  • 决定注解的生命周期,即它存在在哪个阶段。
  1. RetentionPolicy.SOURCE:表示该注解在源码阶段时会被用到
  2. RetentionPolicy.CLASS:表示该注解在程序编译时会被用到
  3. RetentionPolicy.RUNTIME:表示该注解在程序运行时会被用到,我们在实际开发中也经常使用该变量。

表格描述:

RetentionPolicy生命周期应用场景
SOURCE仅存在于源码,编译后丢弃@Override@SuppressWarnings
CLASS存在于编译后的 .class 文件,运行时丢弃@Deprecated
RUNTIME运行时 依然保留,可用反射读取@Autowired@RequestMapping

写法示例:

@Retention(RetentionPolicy.RUNTIME)

@Documented 注解

@Documented 指定该注解是否包含在 Javadoc 文档中。

写法示例:

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface API {
    String value();
}

如果 @API 没有 @Documented,那么 javadoc 生成的文档不会包含它。

@Inherited 注解

@Inherited 允许子类继承父类的注解(但接口的注解不会被继承)。

写法示例:

@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface ParentAnnotation {}

@ParentAnnotation
class Parent {}

class Child extends Parent {}  // Child 也会有 @ParentAnnotation
  • @Inherited 只对生效,不适用于方法、字段

小结

元注解作用适用范围
@Target指定注解可用于类、方法、字段等ElementType 枚举
@Retention指定注解的生命周期SOURCECLASSRUNTIME
@Documented指定注解是否生成 JavadocAPI 文档
@Inherited允许子类继承父类的注解仅限于

这些元注解可以配合使用,例如:

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation {
}

学习参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值