• Java注解


    目录

    注解(Annotation)

    自定义注解

    使用注解

    注解的本质

    元注解

    @Target:

    @Retention:

    注解的解析

    如何解析注解

    演示步骤

    1. 获取目标元素的 Class 对象

    2. 获取注解信息

    3. 解析注解信息

    示例代码


    注解(Annotation)

    就是Java代码里的特殊标记,比如:@Override,@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。

    注意:注解可以用在类上,构造器上,方法上,成员变量上,参数上,等位置

    自定义注解

    除了内置注解,我们还可以定义自己的注解。自定义注解使用 @interface 关键字来声明,可以包含元素(成员变量)和默认值。例如:

    1. import java.lang.annotation.*;
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Target(ElementType.METHOD)
    4. public @interface MyAnnotation {
    5. String value() default "default value";
    6. int count() default 1;
    7. }

    使用注解

    使用注解时,我们可以在程序中通过反射获取注解信息,并根据注解信息执行相应的操作。例如,可以通过反射检查方法是否被某个注解标记,并根据注解信息执行不同的逻辑。

    1. import java.lang.reflect.*;
    2. public class Main {
    3. @MyAnnotation(value = "myValue", count = 2)
    4. public static void myMethod() {
    5. // Method body
    6. }
    7. public static void main(String[] args) throws Exception {
    8. Method method = Main.class.getMethod("myMethod");
    9. MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
    10. if (annotation != null) {
    11. System.out.println("Value: " + annotation.value());
    12. System.out.println("Count: " + annotation.count());
    13. }
    14. }
    15. }

    注解的本质

    通过编译反编译字节码可以看出:注解本质是一个接口,都是继承Annotation注解的,里面的属性都为抽象方法

    使用注解的时候,使用注解就是实现类对象。

    元注解

    指的是:修饰注解的注解

    1. import java.lang.annotation.*;
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Target(ElementType.METHOD)
    4. public @interface MyAnnotation {}

    比如@Retention,@Target就是元注解。

    @Target:

    作用:声明被修饰的注解只能在哪些位置使用

    @Target(ElementTye.TYPE)

    1.TYPE,类,接口

    2.FIELD,成员变量

    3.METHOD,成员方法

    4.PARAMETER,方法参数

    ...

    @Retention:

    作用:声明注解的保留周期

    @Retention(RetentionPolicy.RUNTIME)

    1.SOURCE:只作用在源码阶段,字节码文件中不存在。

    2.CLASS(默认值):保留到字节码文件阶段,运行阶段不存在

    3.RUNTIME(开发常用):一直保留到运行阶段

    注解的解析

    就是判断类上,方法上,成员变量上是否存在注解,并把注解里的内容给解析出来。

    如何解析注解

    指导思想:要解析谁上面的注解就应该先拿到谁。

    比如要解析类上面的注解:则应该先获取该类的class对象,再通过class对象解析其上面的注解。

    比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解。

    演示步骤

    1. 获取目标元素的 Class 对象

    首先,我们需要获取目标元素(类、方法、字段等)的 Class 对象。可以通过以下方式之一获取:

    • 对象实例的 getClass() 方法。
    • 类字面常量,如 MyClass.class

    2. 获取注解信息

    通过 Class 对象,我们可以使用反射方法来获取注解信息。例如:

    • getAnnotation(Class annotationClass):获取指定类型的注解对象。
    • getAnnotations():获取所有的注解对象。

    3. 解析注解信息

    获取注解对象后,我们可以根据注解的定义,获取注解元素的值。注解元素可以是基本类型、枚举类型、注解类型、数组类型等。

    示例代码

    下面是一个简单的示例代码,演示了如何通过反射获取类上的注解信息:

    1. import java.lang.annotation.*;
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Target(ElementType.TYPE)
    4. @interface MyAnnotation {
    5. String value();
    6. }
    7. @MyAnnotation(value = "MyClass Annotation")
    8. public class MyClass {
    9. public static void main(String[] args) throws Exception {
    10. Class clazz = MyClass.class;
    11. // 获取类上的注解对象
    12. MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
    13. // 解析注解信息
    14. if (annotation != null) {
    15. String value = annotation.value();
    16. System.out.println("Annotation Value: " + value);
    17. } else {
    18. System.out.println("No Annotation Found");
    19. }
    20. }
    21. }

  • 相关阅读:
    beanshell入门:脚本中引用自定义的变量和方法和定义运行时变量
    英语语音篇 - 自然拼读
    一致性哈希算法原理
    jsqlparser 工具类获取 where 参数
    03-瑞吉外卖关于菜品/套餐分类表的增删改查
    SpringBoot项目--电脑商城【上传头像】
    springboot 启动原理、启动过程、启动机制的介绍
    ChatGPT AutoExpert:通过自定义指令,增强 GPT-4 和 GPT-3.5-Turbo 对话模型的功能
    网络设备远程登录和管理-双厂商
    CAS:1347750-20-2,氨基PEG巯基,NH2-PEG-SH,Amine-PEG-Thiol
  • 原文地址:https://blog.csdn.net/2401_83045332/article/details/138204190