一、类注解简介
-
定义
- 类注解是一种应用于 Java 类的特殊标注。它可以为类添加额外的元数据信息,以便在编译时、运行时或者通过特定的框架进行处理。
-
作用
- 配置信息提供:许多框架使用类注解来指定类在框架中的角色和行为。例如,在 Spring 框架中,
@Service
、@Controller
等注解用于标识不同类型的业务逻辑组件和控制器类。 - 代码文档化:类注解可以提供关于类的用途、作者、版本等信息,增强代码的可读性和可维护性。
- 编译时检查:某些注解可以触发编译器进行特定的检查,确保类满足一定的条件。
- 配置信息提供:许多框架使用类注解来指定类在框架中的角色和行为。例如,在 Spring 框架中,
-
生命周期
- 类注解可以在编译时、加载类时或运行时被处理。不同的注解保留策略(RetentionPolicy)决定了注解在哪个阶段可见。例如,
RetentionPolicy.RUNTIME
表示注解在运行时仍然可用,可以通过反射机制获取。
- 类注解可以在编译时、加载类时或运行时被处理。不同的注解保留策略(RetentionPolicy)决定了注解在哪个阶段可见。例如,
二、代码样例
- 自定义类注解
- 定义一个类注解:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE) // 表示这个注解可以用在类上
@Retention(RetentionPolicy.RUNTIME) // 在运行时可见
@interface MyClassAnnotation {
String description() default "No description";
}
- 使用自定义类注解
- 在一个类上应用这个注解:
@MyClassAnnotation(description = "This is a sample class")
class SampleClass {
public void sampleMethod() {
System.out.println("This is a method in the annotated class");
}
}
- 运行时读取类注解
- 通过反射机制在运行时读取类注解:
public class Main {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("SampleClass");
if (clazz.isAnnotationPresent(MyClassAnnotation.class)) {
MyClassAnnotation annotation = clazz.getAnnotation(MyClassAnnotation.class);
System.out.println("Class description: " + annotation.description());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}