• 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. }

  • 相关阅读:
    【Java8】java.time 根据日期获取年初年末、月初月末、日初日末
    扩展边界opencv
    Redis持久化策略之RDB与AOF
    java计算机毕业设计-酒店管理系统-源码+mysql数据库+系统+lw文档+部署
    PIP安装
    2018 年第二十三届全国青少年信息学奥林匹克联赛初赛
    软件著作权在哪里查?
    腰部外骨骼机器人线性自抗扰控制器参数优化
    钡铼技术BL100协议转换网关
    MapTR v2文章研读
  • 原文地址:https://blog.csdn.net/2401_83045332/article/details/138204190