✅ 注解(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)