java注解核心逻辑链是定义→保留策略→作用位置→解析时机→实际用途;必须掌握@retention(source/class/runtime三档区别)、@target(method/type/field/parameter等限制)、自定义注解写法(@interface+元素方法)、注解本质是标签,依赖反射驱动,需结合典型场景理解内置注解用途。

Java 注解不是靠死记硬背的,关键在理解逻辑链:定义 → 保留策略 → 作用位置 → 解析时机 → 实际用途。背错顺序或孤立记元注解名称,面试一问就卡壳。下面按高频考察维度,直接给你能上手复述的要点。
一、三个必须说清的元注解
别光列名字,要讲清楚它们“管什么”和“为什么重要”:
- @Retention:决定注解活到哪一步。SOURCE(编译前丢弃,如 @Override)、CLASS(字节码里有但运行时拿不到,如 Lombok 编译期处理)、RUNTIME(反射能读,Spring 所有业务注解都靠它)——面试必答三档区别。
- @Target:限制注解能贴在哪。重点记 ElementType.METHOD(方法)、TYPE(类/接口)、FIELD(字段)、PARAMETER(参数)。如果被问“@Autowired 能用在构造器上吗?”,答案就是看它的 @Target 是否含 CONSTRUCTOR。
- @Documented 和 @Inherited 不是必考,但提一句加分:前者让注解出现在生成的 JavaDoc 里;后者表示子类自动继承父类上的该注解(仅对类有效,方法不继承)。
二、自定义注解的写法套路
面试让你手写一个简单注解,照这个模板填空就行:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
String value() default "default";
int level() default 1;
}
记住两点:
– 注解声明用 @interface,不是 interface 或 class;
– 元素(value、level)本质是方法,必须有返回值类型 + 括号,可设 default 值。
三、注解怎么起作用?一句话闭环回答
“注解本身不干活,它只是个标签;真正干活的是反射 + 处理逻辑。”
比如 Spring 启动时扫描所有带 @Controller 的类,靠的就是:
① Class 对象调用 getDeclaredAnnotations();
② 判断是否 isAnnotationPresent(Controller.class);
③ 获取注解实例后,根据其属性(比如 value = "user")注册对应 Bean。
四、内置注解和典型场景挂钩记
把常见注解和它解决的实际问题绑在一起,比单独背名字牢得多:
- @Override:编译期检查,防止父类方法改名后子类没同步更新;
- @Deprecated:提醒调用方该 API 已淘汰,IDE 会标灰;
- @SuppressWarnings("unchecked"):告诉编译器忽略泛型警告,常用于强制转型场景;
- @FunctionalInterface:确保接口有且仅有一个抽象方法,是 Lambda 使用前提。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










