java如何注解
Java注解基础
Java注解(Annotation)是一种元数据形式,提供与程序元素(类、方法、变量等)关联的附加信息。注解本身不影响代码逻辑,但可通过反射或编译器处理实现特定功能。

注解的定义
使用@interface关键字定义注解:

public @interface CustomAnnotation {
String value() default "default";
int priority() default 1;
}
内置常用注解
@Override:标记方法重写父类或接口方法@Deprecated:标记元素已过时@SuppressWarnings:抑制编译器警告@FunctionalInterface:标记接口为函数式接口
元注解(注解的注解)
@Target:指定注解适用的元素类型(如ElementType.METHOD)@Retention:定义注解保留策略(SOURCE/CLASS/RUNTIME)@Documented:将注解包含在Javadoc中@Inherited:允许子类继承父类注解@Repeatable:允许同一元素多次使用同一注解
注解的使用示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestCase {
String id();
boolean enabled() default true;
}
public class TestClass {
@TestCase(id = "TC001", enabled = false)
public void testMethod() {
// 测试代码
}
}
运行时处理注解
通过反射机制读取运行时保留的注解:
Method method = TestClass.class.getMethod("testMethod");
TestCase annotation = method.getAnnotation(TestCase.class);
if (annotation != null && annotation.enabled()) {
// 执行测试逻辑
}
编译时处理注解
通过注解处理器(继承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;
}
}
注解的常见应用场景
- 框架配置(如Spring的
@Autowired) - 单元测试(如JUnit的
@Test) - 代码生成(如Lombok)
- 权限控制(如自定义权限注解)
- 接口文档生成(如Swagger)
自定义注解最佳实践
- 明确注解的保留策略(
SOURCE/CLASS/RUNTIME) - 为注解元素提供合理的默认值
- 保持注解语义清晰单一
- 考虑与现有注解的兼容性
- 提供详细的文档说明
通过合理使用注解,可以显著提升代码的可读性和可维护性,同时减少样板代码。许多现代Java框架(如Spring、Hibernate)都大量依赖注解机制实现其核心功能。






