温馨提示×

温馨提示×

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

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

反射和注解有何关系

发布时间:2026-10-25 09:17:06 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

反射(Reflection)和注解(Annotation)在 Java 等现代编程语言中关系密切,通常配合使用,但本质上是两个不同层面的概念。


一、基本概念区别

1. 注解(Annotation)

  • 是什么:一种“元数据”,用来给代码(类、方法、字段等)打标签
  • 作用阶段:
    • 源码期(如 @Override)
    • 编译期(如 @SuppressWarnings)
    • 运行期(如 @Autowired、@Test)
  • 本身不干活:注解只是“说明”,不包含逻辑
@Override
@Test
@Autowired

2. 反射(Reflection)

  • 是什么:在运行时动态获取类信息、调用方法、访问字段
  • 能力:
    • 获取类名、方法、字段
    • 动态创建对象
    • 动态调用方法
Class<?> clazz = obj.getClass();
Method m = clazz.getMethod("say");
m.invoke(obj);

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

注解是“标签”,反射是“读标签并做事的工具”

典型配合方式

  1. 用注解“标记”某个类 / 方法
  2. 用反射在运行时“读取注解”
  3. 根据注解信息执行对应逻辑

三、经典示例

1. 定义注解

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}

2. 使用注解

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

3. 用反射读取注解并执行

for (Method m : Demo.class.getMethods()) {
    if (m.isAnnotationPresent(MyTest.class)) {
        m.invoke(new Demo());
    }
}

✅ 没有反射,注解就“没人看” ✅ 没有注解,反射就“不知道该干什么”


四、常见应用场景

场景 注解 反射
Spring @Component 扫描并创建 Bean
JUnit @Test 自动执行测试方法
序列化 @JsonIgnore 控制字段转换
权限校验 @RequireRole 拦截并验证权限

五、一句话总结

注解定义“做什么”,反射负责“怎么去做”

如果你愿意,我也可以用**通俗比喻(如标签 + scanner)**或结合 Spring / MyBatis 来讲。

向AI问一下细节

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

AI
助
手