如何理解java注解
Java注解的基本概念
Java注解(Annotation)是一种元数据形式,提供与程序元素(类、方法、变量等)关联的附加信息。注解本身不影响代码逻辑,但可以通过反射或编译时处理工具(如APT)读取并执行特定操作。注解以@符号开头,例如@Override、@Deprecated。
注解的核心作用
- 编译检查:如
@Override标记方法重写,编译器会验证父类是否存在该方法。 - 代码生成:通过注解处理器(如Lombok的
@Data)在编译时生成代码。 - 运行时处理:通过反射读取注解(如Spring的
@Autowired实现依赖注入)。
注解的分类
-
内置注解
@Override:标记方法重写。@Deprecated:标记过时元素。@SuppressWarnings:抑制编译器警告。
-
元注解(用于定义注解的注解)
@Target:指定注解适用的目标(如ElementType.METHOD)。@Retention:定义注解的生命周期(如RetentionPolicy.RUNTIME)。@Documented:将注解包含在Javadoc中。@Inherited:允许子类继承父类的注解。
自定义注解示例
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
String value() default "default"; // 注解属性
int priority() default 1;
}
使用时:
@CustomAnnotation(value = "test", priority = 2)
public void annotatedMethod() {}
注解的处理方式
-
编译时处理
通过注解处理器(AbstractProcessor)生成代码或报告错误,需配置META-INF/services/javax.annotation.processing.Processor文件。 -
运行时反射处理
通过反射API读取注解信息:
Method method = obj.getClass().getMethod("annotatedMethod"); CustomAnnotation annotation = method.getAnnotation(CustomAnnotation.class); System.out.println(annotation.value());
常见应用场景
- 框架配置:如Spring的
@Controller、Hibernate的@Entity。 - 测试工具:JUnit的
@Test标记测试方法。 - 代码检查:使用注解替代XML配置,减少冗余代码。
通过理解注解的定义、分类和处理机制,可以更高效地利用其简化开发流程。






