温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java注解如何工作

发布时间:2026-10-02 08:04:59 来源:亿速云 阅读:105 作者:小樊 栏目:编程语言

Java 注解(Annotation)本质上是一种元数据(metadata)机制,用来给代码(类、方法、字段等)“打标签”。它本身不改变程序逻辑,真正起作用的是在合适时机读取并处理这些注解的工具。

下面从「是什么 → 怎么定义 → 怎么生效 → 典型工作流程」逐步说明。


一、注解是什么

注解是一种“特殊接口”,编译后变成 java.lang.annotation.Annotation 的子类型。

示例:

@Override
void foo() {}

@Override 只是告诉编译器:这是一个重写方法,如果签名不对就报错。


二、如何定义注解

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value() default "";
}

关键点有两个:

1. @Target

决定注解能用在哪里:

  • TYPE(类/接口)
  • METHOD
  • FIELD
  • PARAMETER
  • 等

2. @Retention(非常重要)

决定注解“活到哪一步”:

策略 生命周期
SOURCE 只存在于源码,编译后消失(如 @Override)
CLASS 在 .class 文件中,但运行时不可见
RUNTIME 运行时可通过反射读取(最常用)

三、注解本身“不会自动工作”

这是最重要的一点:

注解只是标记,真正起作用的是“处理器”

处理器有三种常见形式:


四、注解的三种工作方式

1️⃣ 编译器处理(SOURCE / CLASS)

例子:

  • @Override
  • @SuppressWarnings

流程:

源码 → 编译器读取注解 → 做校验或优化

你感知不到,由 javac 内部处理。


2️⃣ 编译期处理(Annotation Processor)

使用 AbstractProcessor:

源码 → 注解处理器 → 生成新代码 / 校验

典型应用:

  • Lombok
  • Dagger
  • MapStruct

示例(简化):

@SupportedAnnotationTypes("com.x.Log")
public class LogProcessor extends AbstractProcessor {
    public boolean process(...) {
        // 读取注解,生成代码
    }
}

特点:

  • 在编译阶段运行
  • 可生成 .java 文件
  • 不影响运行时性能

3️⃣ 运行期处理(RUNTIME + 反射)

这是最常用、也最好理解的方式。

使用注解

@Log("user")
public void save() {}

通过反射读取

Method m = obj.getClass().getMethod("save");
if (m.isAnnotationPresent(Log.class)) {
    Log log = m.getAnnotation(Log.class);
    System.out.println(log.value());
}

典型应用:

  • Spring(@Controller, @Autowired)
  • JUnit(@Test)
  • 自定义权限 / 日志 / 校验

五、Spring 中注解是如何“活起来”的(典型例子)

以 @Autowired 为例:

  1. Spring 启动
  2. 扫描 Bean
  3. 通过反射读取字段/方法上的 @Autowired
  4. 从容器中找对应类型
  5. 反射注入
field.setAccessible(true);
field.set(bean, dependency);

✅ 注解本身什么都不做
✅ Spring 是“读注解的人”


六、一句话总结

Java 注解 = 标签 + 读取标签的引擎

  • 注解:声明“这是什么”
  • 处理器:决定“该怎么做”
  • 没有处理器,注解毫无作用

如果你愿意,我可以:

  • 写一个完整可运行的自定义注解示例
  • 讲 Spring / MyBatis 中注解的真实源码流程
  • 对比 注解 vs 配置文件

你想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手