**【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
相关推荐
噢,我明白了1 小时前
java中唯一键和幂等键的应用程序猿乐锅1 小时前
【黑马点评 | 第八篇】Redisson分布式锁考虑考虑1 小时前
synchronized字符串常量长谷深风1112 小时前
Tool与Skill:AI能力设计的分水岭m0_587383002 小时前
广州24小时自助健身房解决方案实战指南与系统部署要点Escalating_xu2 小时前
【C 语言】深入理解指针(1·下):指针运算、野指针、assert 与传址实战周杰偷奶茶2 小时前
【Java】数据类型与变量code斗2 小时前
Java数据结构:堆详解重生之小比特2 小时前
【C++进阶】map和set需要8263 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑