Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException

**【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");
相关推荐
小陈工1 分钟前
2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
java·开发语言·数据库·python·安全·web安全·django
小胖java2 分钟前
养老院管理系统
java·spring boot
爱丽_3 分钟前
synchronized到底锁的是什么:对象头 Mark Word、Monitor、锁升级与排查
java
ywlovecjy8 分钟前
Tomcat下载,安装,配置终极版(2024)
java·tomcat
二进制person8 分钟前
JavaEE初阶 --JVM
java·java-ee
北风toto12 分钟前
IDEA模块名字和文件夹名字不一样的解决方式
java·ide·intellij-idea
程途知微13 分钟前
synchronized锁升级全流程解析
java
亓才孓17 分钟前
[Java笔试]易错点总结
java·开发语言
SimonKing19 分钟前
企微、QQ统统接入OpenClaw,蓄水池已满,准备养虾
java·后端·程序员
:12120 分钟前
java---过滤器,监听器
java·开发语言