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");
相关推荐
聆风吟º2 分钟前
【Spring Boot 报错已解决】Error creating bean with entityManagerFactory 原因分析与解决方案
java·spring boot·后端
S***84883 分钟前
【spring boot】 IDEA 启动springboot项目报missing ServletWebServerFactory
spring boot·后端·intellij-idea
Unstoppable223 分钟前
八股训练营第 34 天 | synchronized 和 Lock 的区别是什么?synchronized 和 ReentrantLock 的区别是什么?
java·八股
r***93489 分钟前
【JavaEE】Spring Boot 项目创建
java·spring boot·java-ee
VX:Fegn089511 分钟前
计算机毕业设计|基于springboot + vue毕业设计选题管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
matthew12 分钟前
发布对象和对象逃逸
java
9***g68712 分钟前
SpringSecurity之跨域
java
程序员鱼皮13 分钟前
MySQL 从入门到删库跑路,保姆级教程!
java·计算机·程序员·编程·编程经验
h***673715 分钟前
springboot设置多环境配置文件
java·spring boot·后端
VX:Fegn089516 分钟前
计算机毕设|基springboot+Vue的校园打印系统设计与实现
java·前端·javascript·vue.js·spring boot·后端·课程设计