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、运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例