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");
相关推荐
识君啊17 分钟前
Java双指针 - 附LeetCode 经典题解
java·算法·leetcode·java基础·双指针
java1234_小锋18 分钟前
分享一套优质的SpringBoot4+Vue3学生信息管理系统
java·vue.js·spring boot·学生信息
g***279920 分钟前
knife4j+springboot3.4异常无法正确展示文档
java
weisian15125 分钟前
JVM--10-JVM实战部署全指南:从`java -jar`到生产级高可用
java·jvm·jar·gc
人道领域30 分钟前
Maven多模块开发:高效构建复杂项目
java·开发语言·spring boot·maven
手握风云-39 分钟前
JavaEE 进阶第十九期:MyBatis-Plus,让 CRUD 飞起来
java·java-ee·mybatis
rlpp1 小时前
FrankenPHP实践
java
小灵不想卷1 小时前
LangChain4j 与 SpringBoot 整合
java·后端·langchain4j
Zachery Pole1 小时前
JAVA_07_面向对象
java·开发语言
shalou29011 小时前
mysql-connector-java 和 mysql-connector-j的区别
android·java·mysql