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");
相关推荐
带刺的坐椅13 分钟前
MCP 进化:让静态 Tool 进化为具备“上下文感知”的远程 Skills
java·ai·llm·agent·solon·mcp·tool-call·skills
java1234_小锋18 分钟前
Java线程之间是如何通信的?
java·开发语言
张张努力变强24 分钟前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
while(1){yan}1 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 高校社团管理平台为例,包含答辩的问题和答案
java
余瑜鱼鱼鱼2 小时前
线程和进程的区别和联系
java·开发语言·jvm
小唐同学爱学习2 小时前
如何解决海量数据存储
java·数据库·spring boot·mysql
962464i2 小时前
SBE(simple-binary-encoding)-Demo
java
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧2 小时前
《苍穹外卖》- day01 开发环境搭建
spring boot·后端·spring·maven·intellij-idea·mybatis
-凌凌漆-2 小时前
【Java】java中throws与try catch区别
java