注解与元注解
面试官问:"Java 注解是什么?用过自定义注解吗?"
候选人小丁答:"注解是给代码添加元数据的方式。比如 @Override 就是注解。"
面试官追问:"@Override 注解是怎么工作的?为什么加上 @Override 就能检测方法是否重写?"
小丁说:"编译器会检查?"
面试官又问:"元注解有哪些?"
小丁列举了半天,没说全。
【面试官心理】 注解是 Java 最容易被忽视的特性之一。大多数候选人只知道 @Override 的用法,不知道注解的本质是"interface"、不知道元注解的作用。能说出"运行时注解处理"的候选人,说明有实际开发自定义注解的经验。
一、注解的本质 🔴
1.1 注解是特殊的 interface
@interface 编译后生成一个继承 java.lang.annotation.Annotation 的接口。
1.2 注解的组成部分
1.3 注解的使用
二、四大元注解 🔴
2.1 @Retention:保留策略
⚠️
Spring 的 @Autowired 是 RUNTIMERetention,所以可以用反射读取。如果标记为 CLASS 或 SOURCE,反射就读取不到了。这也是为什么 Spring 能通过反射做依赖注入。
2.2 @Target:使用范围
2.3 @Documented 与 @Inherited
三、自定义注解实战 🔴
3.1 日志注解
3.2 注解处理器(反射实现)
四、Java 8 新增的注解 🟡
4.1 @Repeatable
4.2 @FunctionalInterface
五、Spring 的注解驱动开发 🟡
Spring 2.5 引入的注解,极大简化了 XML 配置:
💡
Spring Boot 的出现让注解驱动达到了巅峰:几乎所有配置都可以用注解替代。能说出 Spring 如何通过反射处理注解的候选人,说明理解 Spring 的核心原理。
六、追问升级
面试官:"注解和注释(comment)有什么区别?"
【面试官心理】 问这个区别的候选人,说明对注解的理解停留在表面。但这个问题本身很简单,能主动提出来的说明有思考。