Java注解

首先java注解非常常用,所以这里开一篇文章理解Java注解的原理。

Java注解定义

注解就是个标签,一个元数据。

元数据就类似于描述数据的数据,比如书籍元数据,写的就是书籍序列号,简介,作者这些。

不改变属性,不执行方法。

告诉编译器,框架,甚至是运行时

所以有些是通过反射实现,有些只是告诉编译器一些信息而已,各种各样。

如何定义注解

1
2
3
@interface MyAnnotatin{
String value() default "";
}

使用注解:在类,方法、字段的那个代码元素上使用即可。

1
2
3
4
5
@MyAnnotation(value = "example")
public class MyClass{
@MyAnnotation
public void myMethod(){}
}

注解怎么起作用?

靠工具,靠框架比如runtime级别的注解,框架在运行时会反射去读取

image-20251216224616318

那么注解上面还有注解。

这个就是元注解

元注解

@Retention:用来定义注解的保留策略,就是注解的有效范围

1
2
3
RetentinoPolicy.SOURCE:注解仅在源码中存在,编译时被丢弃。
RetentinoPolicy.CLASS:注解存在于编译后的.class文件中,但运行时不可用。
RetentinoPolicy.RUNTIME:注解在运行时可用,可以通过反射机制访问

@Target:用来指定注解可以用于哪些代码元素

image-20251216225808603

总结

注解就是个标签,一个元数据。不改变属性,不执行方法。而是让编译器或者框架,在特定的时候处理它,通过@Retention 保留策略,来控制生命周期,SOURCE给编译器,CLASS给字节码工具,RUNTIME给运行时框架。