当前位置: 首页 > news >正文

SpringBoot 的注解原理,及自定义注解

JAVA 注解原理

在 Java 项目编译后,注解会以特定的方式存储在 .class 文件中,并可以在运行时通过反射机制进行解析和处理。以下是关于注解在编译后如何存在、以及在运行时如何解析和处理的详细解释:

1. 注解的存储方式

Java 的注解可以有不同的保留策略(Retention Policy),这决定了注解在编译后的 .class 文件中的存储方式以及它们在运行时的可见性。常见的保留策略有三种:

SOURCE:注解只在源码中存在,编译后不会被保留到 .class 文件中。例如,@Override 就是这样的注解。

CLASS:注解会被保留到 .class 文件中,但在运行时不可见(即通过反射无法访问到)。这是注解的默认保留策略。

RUNTIME:注解不仅会被保留到 .class 文件中,而且在运行时可以通过反射机制进行访问。Spring 框架中的大多数注解(如 @Autowired, @RequestMapping 等)都是 RUNTIME 注解。

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {String value();
}

2. 运行时如何解析注解

在运行时,Java 通过反射机制来解析和处理注解。反射允许程序动态地检查和操作类的结构,包括类、方法、字段、参数等的注解信息。

获取注解信息的步骤:

1. 获取类的引用

• 通过 Class<?> clazz = MyClass.class; 或者 Class<?> clazz = object.getClass(); 获取目标类的引用。

2. 获取注解:   (下面获取注解的方式,就教反射)

为什么要用反射创建对象_为什么几乎所有的Java框架都要用到反射机制,她的魅力在哪里?...-CSDN博客

• 可以使用以下方法来获取注解:

• clazz.getAnnotation(MyAnnotation.class):获取类级别的注解。

• method.getAnnotation(MyAnnotation.class):获取方法级别的注解。

• field.getAnnotation(MyAnnotation.class):获取字段级别的注解。

• parameter.getAnnotation(MyAnnotation.class):获取参数级别的注解。

这些方法返回的是注解对象,如果注解不存在,则返回 null。

3. 读取注解属性

• 通过调用注解对象的方法来读取注解的属性值。例如:

MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
if (annotation != null) {
    String value = annotation.value();
    System.out.println("Annotation value: " + value);
}

----- 

自定义注解:

通过 @Retention 定义 注解在java文件中如何保存 。 

SOURCE , CLASS , RUNTIME

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

    // 注解定义

}


http://www.mrgr.cn/news/15210.html

相关文章:

  • 【自己电脑打开不了产品发的AXURE,HTML需求原型直接简单解决方式】
  • 基于vue框架的残疾人就业帮扶平台97c5w(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 大语言模型数据增强与模型蒸馏解决方案
  • GMS——利用 ChatGPT 和扩散模型进行制造业革命
  • CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(二)
  • TensorFlow 的基本概念和使用场景。
  • AI学习记录 - 线性代数(3Blue1Brown)
  • 美国硅谷多ip服务器用途广吗?
  • nefu暑假acm集训1 构造矩阵 个人模板+例题汇总
  • 【精选】基于数据可视化的智慧社区内网平台(程序员阿龙出品精品)
  • cesium 发光线
  • (三)了解MySQL 【用户创建和权限/索引】
  • 天玑9200 V2双芯联动旗舰手机Vivo X90拆解
  • 你好GPT-4o,程序员如何通过GPT-4o提升自己的编码能力
  • wpf prism 《3》 弹窗 IOC
  • 安全帽佩戴监测摄像机
  • 2024最新版DataGrip安装教程-全网最新版教程
  • java 读取json文件并写入Excel
  • Windows Edge兼容性问题修复
  • day15JS-es6的基础语法