当前位置: 首页>编程语言>正文

Java注解详解以及自定义注解实战!!!

Java注解详解以及自定义注解实战

    • 一、 注解简介
      • 1. 注解表示:
      • 2. 定义注解
      • 3. 元注解
        • 1. @Target
        • 2. @Retention
        • 3. @Documented
        • 4. @Inherited
      • 4. 注解的使用
    • 二、自定义注解
      • 1. 定义自定义注解
      • 2. 在类中使用自定义注解
      • 3. 处理注解信息
  • 总结

  本文记录一下Java注解以及自定义注解实战。

一、 注解简介

  注解是一种用于在Java代码中添加元数据和标记信息的特殊语法。注解可以用于提供程序的额外信息,帮助编译器、工具和框架进行特定的处理。

1. 注解表示:

  使用 @ 符号加上注解名称来表示,例如: @Override 、 @Deprecated 等。

2. 定义注解

  可以通过 @interface 关键字来定义自定义注解。代码如下:

@interface Demo{
       String value();
       int number() default 0;
   }

3. 元注解

  元注解是用来注解其他注解的注解,可以控制注解的行为和作用范围。常用的元注解包括 @Target 、 @Retention 、 @Documented 、 @Inherited 等。

1. @Target

  用于指定注解可以应用的目标元素类型。它包含一个ElementType类型的数组,表示注解可以应用的目标类型。常见的目标类型包括 ElementType.TYPE (类、接口、枚举)、 ElementType.METHOD (方法)、 ElementType.FIELD (字段)等。示例如下:

@Target({ElementType.TYPE, ElementType.METHOD})
public @interface TargetAnnotation {
    //  attributes
}
2. @Retention

  用于指定注解的保留策略,即注解在什么时候有效。它包含一个RetentionPolicy类型的属性,表示注解的保留策略。常见的保留策略包括 RetentionPolicy.SOURCE (源码级别,编译后丢弃)、 RetentionPolicy.CLASS (类级别,编译后保留在字节码中)、 RetentionPolicy.RUNTIME (运行时级别,可以通反射(关于反射详细可以看我的另一篇博文 java反射机制。示例如下:

@Retention(RetentionPolicy.RUNTIME)
public @interface RetentionAnnotation {
    //  attributes
}
3. @Documented

  用于指定注解是否包含在Java文档中。如果一个注解被@Documented注解,则它的信息会包含在生成的Java文档中 ,示例如下:

@Documented
public @interface DocumentedAnnotation {
    //  attributes
}
4. @Inherited

  用于指定注解是否具有继承性。如果一个注解被@Inherited注解,则它的子类会继承该注解。通常用于标记注解,表示子类也应用该注解。例如:

@Inherited
public @interface InheritedAnnotation {
    //  attributes
}

4. 注解的使用

  注解可以用于标记类、方法、字段等元素,也可以在运行时通过反射获取注解信息。



二、自定义注解

1. 定义自定义注解

首先,我们需要定义一个自定义注解,如下定义了一个 @MethodInfo 注解,表示方法的信息,包括方法名和作者名。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)  //运行时有效
@Target(ElementType.METHOD)  //作用在方法上
public @interface MethodInfo {
    String author() default "Unknown";  
    String date();
    int version() default 1;
}

2. 在类中使用自定义注解

然后,使用自定义注解 @MethodInfo ,标记一个方法,并在注解中提供方法的信息。

public class MyClass {

    @MethodInfo(author = "author", date = "2024-01-01", version = 2)
    public void myMethod() {
        System.out.println("This is author method.");
    }
}

3. 处理注解信息

通过反射来处理注解信息,获取方法上的注解信息并进行相应的处理。

import java.lang.reflect.Method;

public class AnnotationExample {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        Class<?> clazz = myClass.getClass();

        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(MethodInfo.class)) { //判断是否被注解标注
                MethodInfo methodInfo = method.getAnnotation(MethodInfo.class); //获取注解信息
                System.out.println("Method Name: " + method.getName());  //Method Name: myMethod
                System.out.println("Author: " + methodInfo.author()); //Author: author
                System.out.println("Date: " + methodInfo.date()); //Date: 2024-01-01
                System.out.println("Version: " + methodInfo.version()); //Version: 2
            }
        }
    }
}


总结

   本文记录一下Java注解以及自定义注解实战。
  希望对看到本文的你有帮助。



上一篇 java反射机制
记得点赞收藏哦!!!
下一篇 java自定义注解属性详解

https://www.xamrdz.com/lan/5d31848788.html

相关文章: