引言
注解是 Java 中给代码'贴标签'的机制,本身不直接影响执行,但能通过工具或框架赋予额外含义。自定义注解结合反射可实现日志记录、权限校验等动态逻辑。
一、自定义注解基础:@interface 关键字
自定义注解使用 @interface 关键字定义,本质上是一种特殊的接口(编译后会生成继承 java.lang.annotation.Annotation 的接口)。
1.1 最简单的自定义注解
// 定义一个空注解
public @interface MyFirstAnnotation { }
这个注解没有任何属性,仅作为标记使用。可以直接标注在类、方法等元素上:
@MyFirstAnnotation
public class Demo {
@MyFirstAnnotation
public void test() {}
}
1.2 带属性的注解
注解可以包含'属性'(类似接口的抽象方法),使用时需要为属性赋值(除非有默认值)。
public @interface UserInfo {
// 字符串属性
String name();
// 整数属性,带默认值
int age() default 18;
// 数组属性
String[] hobbies() default {"coding"};
}
使用时的语法(属性名 = 值):
@UserInfo(name = "张三", age = 20, hobbies = {"篮球", "游戏"})
public class Person {}
💡 特殊规则:
若属性名是 value,且只有这一个属性需要赋值,可省略属性名:@MyAnnotation("test") 数组属性若只有一个元素,可省略大括号:hobbies = "足球"
二、元注解:注解的'注解'
元注解是用于修饰注解的注解,规定了自定义注解的使用范围、生命周期等特性。Java 内置了 4 种元注解:@Target、@Retention、@Documented、@Inherited。


