java注解如何启作用
Java注解的作用机制
Java注解(Annotation)是一种元数据形式,提供与程序元素(类、方法、变量等)关联的附加信息。注解本身不直接影响代码逻辑,但可以通过反射或编译时处理工具(如APT)触发特定行为。
注解的基本使用
定义注解需使用@interface关键字:
public @interface CustomAnnotation {
String value() default "";
int priority() default 0;
}
应用注解到目标元素:
@CustomAnnotation(value = "example", priority = 1)
public class DemoClass {}
运行时处理注解
通过反射机制读取和处理注解:
Class<?> clazz = DemoClass.class;
if (clazz.isAnnotationPresent(CustomAnnotation.class)) {
CustomAnnotation annotation = clazz.getAnnotation(CustomAnnotation.class);
System.out.println(annotation.value());
}
编译时处理注解
使用注解处理器(AbstractProcessor)在编译阶段生成代码或验证逻辑:
@SupportedAnnotationTypes("com.example.CustomAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class CustomProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
// 处理注解逻辑
return true;
}
}
需在META-INF/services/javax.annotation.processing.Processor文件中注册处理器类路径。

内置注解示例
@Override:标记方法重写@Deprecated:标记过时元素@SuppressWarnings:抑制编译器警告
元注解控制注解行为
@Retention:指定注解保留策略(SOURCE/CLASS/RUNTIME)@Target:限定注解可应用的目标元素类型@Inherited:允许子类继承父类注解@Repeatable:允许同一位置重复使用注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestCase {
String id();
}
注解的典型应用场景
- 框架配置(Spring的
@Autowired) - 单元测试(JUnit的
@Test) - 代码生成(Lombok的
@Data) - 接口文档(Swagger的
@ApiOperation)
注解的价值在于将元数据与代码紧密结合,减少样板代码,同时保持较高的可读性和可维护性。






