**【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
相关推荐
IT利刃出鞘1 分钟前
Spring工具类--ObjectUtils的使用MY_TEUCK6 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程我爱cope7 小时前
【从0开始学设计模式-10| 装饰模式】朝新_7 小时前
【Spring AI 】图像与语音模型实战RH2312118 小时前
2026.4.16Linux 管道zmsofts8 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透aq553560010 小时前
编程语言三巨头:汇编、C++与PHP大比拼我是无敌小恐龙10 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)心态与习惯11 小时前
Julia 初探,及与 C++,Java,Python 的比较一叶飘零_sweeeet11 小时前
优秀文章合集