✅ 注解(Annotation)

注解 是 Java 5 引入的一种语法,用来为程序中的元素(类、方法、变量等)添加元信息(描述信息),不会影响程序逻辑。

✅ 本质:注解是代码的“说明标签”,可以被编译器或框架读取并处理。


✅ 注解的作用

作用 举例
编译检查 @Override 提醒方法是重写父类方法
文档生成 @author@version
运行时反射处理 @Test@Controller
配合框架使用 Spring、Junit、MyBatis 广泛使用注解

✅ 常用内置注解(Java 自带)

注解名 说明
@Override 重写父类方法
@Deprecated 标记方法已过时
@SuppressWarnings 忽略警告,例如泛型警告

示例:

1
2
3
4
@Override
public String toString() {
return "重写了 Object 的 toString 方法";
}

✅ 自定义注解

✨ 语法格式:

1
2
3
public @interface 注解名 {
数据类型 属性名() default 默认值;
}

示例:定义一个注解 @MyAnnotation

1
2
3
4
public @interface MyAnnotation {
String value(); // 属性
int age() default 18; // 有默认值
}

使用注解:

1
2
3
@MyAnnotation(value = "张三")
public class Demo {
}

✅ 注解的元注解(给注解加注解)

注解名 作用
@Target 限定注解能用在哪(类、方法、属性等)
@Retention 限定注解的生命周期(源码 / 编译 / 运行)
@Documented 是否生成到 JavaDoc
@Inherited 子类是否能继承父类的注解

示例:常见组合

1
2
3
4
5
6
7
import java.lang.annotation.*;

@Target({ElementType.TYPE, ElementType.METHOD}) // 用于类和方法
@Retention(RetentionPolicy.RUNTIME) // 运行时保留,支持反射读取
public @interface MyAnnotation {
String value();
}

✅ 结合反射读取注解(常考)

1
2
3
4
5
6
7
8
9
10
11
12
@MyAnnotation(value = "测试注解")
public class Demo {}

public class Test {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("Demo");
if (cls.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation an = cls.getAnnotation(MyAnnotation.class);
System.out.println("注解的值:" + an.value());
}
}
}

✅ 注解 vs 接口 vs 配置文件

特性 注解 接口 配置文件
编译检查
可读性强
动态灵活
易维护

✅ 注解使用场景

  • ✅ 框架开发(Spring、MyBatis、JPA)
  • ✅ 编写测试(JUnit)
  • ✅ 权限控制、日志记录(AOP)
  • ✅ 注解处理器生成代码(如 Lombok)