**【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
相关推荐
纪莫2 分钟前
技术面:MySQL篇(InnoDB的锁机制)Remember_9939 分钟前
【LeetCode精选算法】滑动窗口专题二Filotimo_19 分钟前
在java开发中,cron表达式概念码农水水39 分钟前
京东Java面试被问:HTTP/2的多路复用和头部压缩实现你怎么知道我是队长1 小时前
C语言---未定义行为没有bug.的程序员1 小时前
Java 序列化:Serializable vs. Protobuf 的性能与兼容性深度对比愚公移码1 小时前
蓝凌EKP产品:主文档权限机制浅析Remember_9932 小时前
【LeetCode精选算法】滑动窗口专题一开开心心就好2 小时前
音频编辑工具,多端支持基础剪辑易操作凯子坚持 c2 小时前
Protocol Buffers C++ 进阶数据类型与应用逻辑深度解析