反射(Reflection)和注解(Annotation)在 Java 等现代编程语言中关系密切,通常配合使用,但本质上是两个不同层面的概念。
@Override)@SuppressWarnings)@Autowired、@Test)@Override
@Test
@Autowired
Class<?> clazz = obj.getClass();
Method m = clazz.getMethod("say");
m.invoke(obj);
注解是“标签”,反射是“读标签并做事的工具”
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
public class Demo {
@MyTest
public void test1() {
System.out.println("run test1");
}
}
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 来讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。