【java】java中注解的简介,如何自定义注解,有哪些类型,有什么作用

java注解

注解的定义

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

首先要明确一点的是,注解并没有实际的作用,注解只是起到了标记的作用,仅此而已

注解的类型

1、Java自带的标准注解
包括@Override、@Deprecated、@SuppressWarnings等,使用这些注解后编译器就会进行检查。

2、元注解
元注解是用于定义注解的注解,包括@Retention、@Target、@Inherited、@Documented、@Repeatable 等。
元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。

3、自定义注解
用户可以根据自己的需求定义注解。

如何自定义注解?
其实很简单的,例子如下

package com.spring.annotation;

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

/**
 * 请求映射
 *
 * @author ez4sterben
 * @date 2023/07/22
 */
@Target({
    
    ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMapping {
    
    

    String value() default "";
}

使用方式可以参考博主的这篇博客
【仿写spring】一、通过反射读取带有@RequestMapping与@Controller注解的类并模拟请求路径调用方法

注解的组成

注解主类

package java.lang.annotation;
public interface Annotation {
    
    

    boolean equals(Object obj);

    int hashCode();

    String toString();

    Class<? extends Annotation> annotationType();
}

ElementType,枚举类,放在@Target中表示注解可以在哪些位置生效

package java.lang.annotation;

public enum ElementType {
    
    
    TYPE,               /* 类、接口(包括注释类型)或枚举声明  */

    FIELD,              /* 字段声明(包括枚举常量)  */

    METHOD,             /* 方法声明  */

    PARAMETER,          /* 参数声明  */

    CONSTRUCTOR,        /* 构造方法声明  */

    LOCAL_VARIABLE,     /* 局部变量声明  */

    ANNOTATION_TYPE,    /* 注释类型声明  */

    PACKAGE             /* 包声明  */
}

用来声明注解的生命周期

package java.lang.annotation;
public enum RetentionPolicy {
    
    
    SOURCE,            /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了  */

    CLASS,             /* 编译器将Annotation存储于类对应的.class文件中。默认行为  */

    RUNTIME            /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */
}

注解的架构

注解的作用

1、生成文档,通过代码里标识的元数据生成javadoc文档。

2、编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。

3、编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。

4、运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例

猜你喜欢

转载自blog.csdn.net/qq_51383106/article/details/131872877