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");
相关推荐
INFINI Labs6 小时前
使用 Docker Compose 轻松实现 INFINI Console 离线部署与持久化管理
java·docker·eureka·devops·docker compose·console·easyserach
Cosolar6 小时前
国产麒麟系统 aarch64 架构 PostgreSQL 15 源码编译安装完整教程
java·后端
GalaxyPokemon6 小时前
PlayerFeedback 插件开发日志
java·服务器·前端
天天摸鱼的java工程师6 小时前
别再写那些重复代码了!8年Java老兵教你用 Hutool 提升开发效率
java·后端
喝杯绿茶6 小时前
springboot中的事务
java·spring boot·后端
麦兜*6 小时前
多阶段构建:打造最小化的 Spring Boot Docker 镜像
java·spring boot·后端·spring cloud·docker
oak隔壁找我7 小时前
Spring Boot Starter 入门教程
java·后端
YoungP7 小时前
【Effective Java 条目一】-- 用静态工厂方法替代构造器
java
高山上有一只小老虎7 小时前
求最大连续bit数
java·算法
vxiam14xxx7 小时前
【Java Swing 项目】java 聊天系统
java·开发语言·python