Java注解(Annotation)的原理和分类?
请详细解释Java**注解(Annotation)**的概念、内置注解分类(@Override、@Deprecated、@SuppressWarnings等)、元注解(@Retention、@Target、@Inherited、@Documented、@Repeatable)的作用,以及注解在运行时和编译期的处理机制。
回答
小字辈
注解:Java 5引入的元数据(metadata)机制,为代码添加额外的信息,不直接影响代码执行。
内置分类:
- 编译检查:@Override(检查重写)、@SuppressWarnings(抑制警告)、@Deprecated(标记弃用)
- 其他:@FunctionalInterface(函数式接口检查)、@SafeVarargs(抑制堆污染警告)
元注解(注解的注解):
- @Retention:生命周期
- SOURCE:仅源码(如@SuppressWarnings)
- CLASS:字节码中(默认),但运行时不加载
- RUNTIME:运行时可通过反射读取(如Spring注解)
- @Target:作用目标(TYPE、FIELD、METHOD、PARAMETER等)
- @Inherited:注解是否被子类继承
- @Documented:是否包含在JavaDoc中
- @Repeatable(Java 8):允许重复使用同一注解
处理机制:
- 编译期:APT(Annotation Processing Tool)生成代码(如Lombok)
- 运行期:反射获取注解信息(如Spring @Autowired)