当前位置: 首页 > article >正文

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");

http://www.kler.cn/news/363152.html

相关文章:

  • Elastic Stack简介
  • Docker部署MySQL主从复制
  • 记录一次从nacos配置信息泄露到redis写计划任务接管主机
  • QGraphics类型学习使用【Qt】【C++】
  • C语言预处理详细过程
  • R语言笔记(一)
  • 可编辑38页PPT | 柔性制造企业数字化转型与智能工厂建设方案
  • 分享一个IDEA里面的Debug调试设置
  • 驾校小程序:一站式学车解决方案的设计与实践
  • 内网穿透
  • 如何使用 pnpm 进行打补丁patch操作?推荐两个方法
  • 【小红书一面】Kafka 是如何选择 Leader的?
  • Unity目录居然这么写就不会被引入到项目内
  • python第五次作业
  • 手机怎么玩GTA5?GameViewer远程助你手机畅玩GTA5侠盗飞车
  • 【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制
  • etl-查询错误log日志和oracle删除数据表空间
  • ansible一键部署k8s集群
  • 20241024-帖子发布
  • Ollama
  • git 工作环境恢复到上次提交
  • node.js 的顶级对象
  • spring中的枚举类型转换
  • 人工智能需要学哪些课程?
  • <大厂实战经验> Flutter鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
  • java文件分片与合并:RandomAccessFile+FileInputStream+FileOutputStream