Java核心技术深度解析:注解与多线程最佳实践
一、注解(Annotation):超越注释的元编程艺术
1.1 注解本质解析
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Measured {
TimeUnit unit() default TimeUnit.MILLISECONDS;
String tag() default "";
}
• 字节码增强原理:注解信息存储在Class文件的attributes结构中
• 保留策略对比:
RetentionPolicy | 编译器处理 | Class文件 | JVM加载 |
---|---|---|---|
SOURCE | 丢弃 | 不保留 | 不可见 |
CLASS | 保留 | 保留 | 不可见 |
RUNTIME | 保留 | 保留 | 保留 |
1.2 注解处理全流程
编译时处理示例(APT):
@AutoService(Processor.class)
public class BuilderProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
// 解析@Builder注解生成代码
}
}
运行时处理示例:
public void processAnnotations(Object obj) {
Class<?> clazz = obj.getClass();
for (Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(Measured.class)) {
Measured measured = method.getAnnotation(Measured.class);
// 实现方法耗时监控
}
}
}
1.3 企业级应用模式
Spring注解驱动编程模型:
@RestController
@RequestMapping("/api"