**【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
相关推荐
识君啊12 小时前
Java双指针 - 附LeetCode 经典题解java1234_小锋12 小时前
分享一套优质的SpringBoot4+Vue3学生信息管理系统g***279912 小时前
knife4j+springboot3.4异常无法正确展示文档weisian15112 小时前
JVM--10-JVM实战部署全指南:从`java -jar`到生产级高可用人道领域12 小时前
Maven多模块开发:高效构建复杂项目手握风云-12 小时前
JavaEE 进阶第十九期:MyBatis-Plus,让 CRUD 飞起来rlpp13 小时前
FrankenPHP实践小灵不想卷13 小时前
LangChain4j 与 SpringBoot 整合Zachery Pole13 小时前
JAVA_07_面向对象shalou290113 小时前
mysql-connector-java 和 mysql-connector-j的区别