【Java注解的作用是什么?】

2023-12-25 20:53:22

在这里插入图片描述


🍁典型解析


Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到Java 的。


Java的注解,可以说是一种标识,标识一个类或者一个字段,常常是和反射,AOP结合起来使用。中间件一般会定义注解,如果某些类或字段符合条件,就执行某些能力。


🍁扩展知识仓


🍁什么是元注解


说简单点,就是 定义其他注解的注解。


Java的元注解是用于注解其他注解的注解。它们用于描述注解本身的一些属性,例如它们的元数据。


Java标准库提供了四个元注解:

@Retention (表示在什么级别保存该注解信息) , @Target(表示该注解可以用于什么地方) , @Documented (将此注解包合在iavadoc中) , 和 @Inherited (允许子类继承父类中的注解) 。

一般@Target是被用的最多的


🍁@Retention


  • 描述了注解的生命周期。
  • 有三个可能的值:SOURCE、CLASS、和 RUNTIME。

指定被修饰的注解的生命周期,即注解在源代码、编译时还是运行时保留。它有三个可选的枚举值: SOURCECLASS和RUNTIME。默认为CLASS。


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

@Retention(RetentionPolicy.RUNTIME)

public @interface MyRuntimeAnnotation {
		//some elements and values
}


🍁@Target


  • 描述了注解应用的Java元素类型。
  • 可以用于类、方法、字段等。

指定被修饰的注解可以应用于的元素类型,如类、方法、字段等。这样可以限制注解的使用范围,避免错误使用。


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

@Target({ElementType.TYPEElementType.METHOD})

public @interface MyTargetAnnotation {
	//some elements and values
} 

🍁@Documented


当一个注解被标记为@Documented,它会被包含在JavaDoc中。

用于指示注解是否会出现在生成的Java文档中。如果一个注解被@Documented元注解修饰,则该注解的信息会出现在API文档中,方便开发者查阅。


import java.lang.annotation.Documented;  


@Documented
public @interface MyDocumentedAnnotation {
	//some elements and values
}

🍁@Inherited


如果一个注解被标记为@Inherited,那么当一个类被标记为该注解时,它的子类也会继承这个注解。


指示被该注解修饰的注解是否可以被继承。默认情况下,注解不会被继承,即子类不会继承父类的注解。但如果将个注解用@Inherited修饰,那人它就可以被了类继承。


import java.lang.annotation .Inherited;


@Inherited
public @interface MyInheritedAnnotation  {
	//some elements and values
}

注意:

比如Override这个注解,就不是一个元注解。而是通过元注解定义出来的。


看一个代码,其中包含了多个自定义注解和元注解的使用:


import java.lang.annotation.*;  

/**
 * @ author 昕宝爸爸
 */
  
// 定义一个元注解,用于标记其他注解为“高级”  
@Target(ElementType.ANNOTATION_TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Advanced {  
}  
  
// 定义一个元注解,用于标记其他注解为“实验性”  
@Target(ElementType.ANNOTATION_TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Experimental {  
}  
  
// 定义一个高级且实验性的注解,用于标记类  
@Advanced  
@Experimental  
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface ComplexAnnotation {  
    String description() default ""; // 描述信息  
    int version() default 1; // 版本号  
}  
  
// 使用ComplexAnnotation注解的类  
@ComplexAnnotation(description = "注解的示例", version = 2)  
public class ComplexClass {  
    // ... class body ...  
}

在这个例子中,我们定义了两个元注解:@Advanced 和 @Experimental。这两个元注解本身没有实际功能,只是用于标记其他注解。然后,我们定义了一个复杂的注解 @ComplexAnnotation,该注解被标记为 @Advanced 和 @Experimental。最后,我们在一个类 ComplexClass 上使用了 @ComplexAnnotation 注解,并为其提供了描述信息和版本号。这个示例展示了如何创建和使用复杂的自定义注解和元注解。

文章来源:https://blog.csdn.net/Java_Yangxiaoyuan/article/details/135205719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。