沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • Spring

    • Spring基础小结
    • 聊聊Spring IoC 和 AOP
    • AOP实战
    • 元注解知识小结
      • 元注解
      • @Target 注解
      • @Retention 注解
      • @Documented 注解
      • @Inherited 注解
      • 小结
      • 学习参考
    • SpringCache小记
    • 异步注解相关
    • ThreadPoolTaskExecutor与ThreadPoolExecutor的区别
    • 讲讲Spring事务
  • SpringBoot

  • Mybatis

  • Shiro

  • 常用框架
  • Spring
沉梦听雨
2024-08-31
目录

元注解知识小结

# 元注解知识小结

注解官方解释:

从 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 另一个注解 自定义注解
PACKAGE 包 package-info.java

写法示例:

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

# @Retention 注解

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

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

表格描述:

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

写法示例:

@Retention(RetentionPolicy.RUNTIME)
1

# @Documented 注解

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

写法示例:

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface API {
    String value();
}
1
2
3
4
5
6

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

# @Inherited 注解

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

写法示例:

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

@ParentAnnotation
class Parent {}

class Child extends Parent {}  // Child 也会有 @ParentAnnotation
1
2
3
4
5
6
7
8
9
  • @Inherited 只对类生效,不适用于方法、字段。

# 小结

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

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

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation {
}
1
2
3
4
5
6

# 学习参考

  • 真实案例!java自定义注解实战! - 掘金 (juejin.cn) (opens new window)
上次更新: 2025/3/20 16:42:28
AOP实战
SpringCache小记

← AOP实战 SpringCache小记→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式