温馨提示×

温馨提示×

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

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

java注解和反射关系

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

在 Java 中,**注解(Annotation)和反射(Reflection)**是紧密配合的一套机制:注解用于“标记/描述”代码,反射用于在运行时“读取”这些标记并据此执行逻辑。下面从概念、关系、工作流程和示例几个层面说明。


一、基本概念

1. 注解(Annotation)

  • 一种元数据(metadata)
  • 本身对代码逻辑没有直接影响
  • 常见用途:
    • 编译检查(@Override、@Deprecated)
    • 生成代码 / 配置文件
    • 运行时框架控制(Spring、JUnit)

示例:

@Override
public String toString() { ... }

2. 反射(Reflection)

  • 在运行时动态获取类信息
  • 可以:
    • 获取类、方法、字段
    • 调用方法
    • 读取注解

二、注解和反射的关系(核心)

注解本身不会自动起作用,必须靠“代码(通常是反射)”去读取它

关系可以概括为:

注解 = 标签
反射 = 读标签并做事

关键点

  • 注解需要设置保留策略为运行时:
@Retention(RetentionPolicy.RUNTIME)
  • 只有 RUNTIME 的注解才能被反射读取

三、典型工作流程

  1. 定义注解
  2. 在类 / 方法 / 字段上使用注解
  3. 在运行时通过反射读取注解
  4. 根据注解执行对应逻辑

四、示例:注解 + 反射

1. 定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}

2. 使用注解

public class Demo {
    @Test
    public void method1() {
        System.out.println("test1");
    }

    public void method2() {
        System.out.println("normal");
    }
}

3. 用反射读取注解

public class Runner {
    public static void main(String[] args) throws Exception {
        for (Method m : Demo.class.getMethods()) {
            if (m.isAnnotationPresent(Test.class)) {
                m.invoke(new Demo());
            }
        }
    }
}

✅ 输出:

test1

五、常见框架中的体现

框架 注解 反射作用
Spring @Autowired 反射注入对象
JUnit @Test 反射调用测试方法
MyBatis @Select 反射生成 SQL

六、一句话总结

注解是“声明”,反射是“执行”;没有反射,注解通常只是装饰。

如果你愿意,我也可以帮你画一张注解 + 反射执行流程图,或者用 Spring 源码级别来讲。

向AI问一下细节

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

AI
助
手