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