**【BUG】**通过@Autowired注入了一个Bean SeqNo,测试的时候需要修改其中的字段。通过传统的反射,无论如何都拿不到信息,关键是一方面可以通过IDEA跳转,一方面debug也确实能看到这个字段。但是每次调用set方法报错:NoSuchFieldException:dcnNo36。
**【问题分析】**采用传统反射可能是因为seqNo是某个代理类或 AOP 代理对象,导致反射时获取的类与实际的实现类不一致。
Class<?> seqNoClass = seqNo.getClass(); Field field = seqNoClass.getDeclaredField("dcnNo36"); field.setAccessible(true); field.set(seqNo,"123");【解决方案】****
ReflectionUtils.findField是 Spring 提供的工具方法,它会尝试查找指定名称的字段,无论是公共的、私有的还是继承的字段。
Field field = ReflectionUtils.findField(seqNoClass, "dcnNo36");
Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException
燕双嘤2024-10-21 2:38
相关推荐
s***11705 小时前
常见的 Spring 项目目录结构O***P5715 小时前
记录 idea 启动 tomcat 控制台输出乱码问题解决7***47715 小时前
在2023idea中如何创建SpringBoot2***c4355 小时前
解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南j***78885 小时前
【Spring】IDEA中创建Spring项目豆沙沙包?5 小时前
2025年--Lc293-784. 字母大小写全排列(回溯)--java版q***99635 小时前
【MyBatisPlus】MyBatisPlus介绍与使用豆奶特浓65 小时前
Java面试生死局:谢飞机遭遇在线教育场景,从JVM、Spring Security到AI Agent,他能飞吗?前端世界6 小时前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑豐儀麟阁贵6 小时前
8.5在方法中抛出异常