解决Spring Boot中’factoryBeanObjectType’属性类型不匹配问题的方案

问题背景

在Spring Boot应用开发过程中,执行单元测试时可能会遇到一个棘手的类型转换异常。本文详细记录了该问题的排查过程,若您仅关注解决方案,可直接跳转至文末处理步骤。
运行环境:
- Spring Boot 3.2.1
- JDK 17
系统抛出的关键错误信息为:
"Caused by: java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String"
异常截图如下:
错误截图
完整的错误堆栈信息如下:

[详细错误日志内容保持不变...]

解决方案

通过分析异常信息,我们发现这是由于类型不匹配导致的。参考mybatis-spring项目的issue 855可知:
在Spring Boot 3.0及以上版本中,FactoryBeanRegistrySupport类的getTypeForFactoryBeanFromAttributes方法进行了升级,要求factoryBeanObjectType属性必须是ResolvableType或Class类型,否则会抛出IllegalArgumentException异常。
问题截图:
版本变更说明
项目当前使用的mybatis-plus-boot-starter为最新版3.5.5,但依赖的mybatis-spring版本为2.1.2,存在兼容性问题。
版本截图:
版本信息
各组件版本兼容关系如下:
兼容性对照表
具体解决步骤如下:
步骤一:移除mybatis-plus-boot-starter中的旧版mybatis-spring依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>

步骤二:添加新版mybatis-spring依赖

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>

步骤三:验证修复效果
重新执行单元测试后,系统正常运行:
测试成功截图
技术原理说明(可选阅读)
在Spring Boot 3.2.0-M2版本中,FactoryBeanRegistrySupport类的类型检查逻辑进行了强化。而在mybatis-spring 3.0.3版本中,通过反射机制将字符串类型的beanClassName转换为实际的Class对象,从而满足类型要求。
关键代码实现:

// 代码示例保持不变...

最终效果验证:
最终解决方案验证
注意事项
1. 确保所有相关依赖版本兼容
2. 建议在修改依赖后清理并重新构建项目
3. 对于复杂项目,建议逐步验证各模块功能

总结

本文详细记录了Spring Boot应用中'factoryBeanObjectType'属性类型问题的完整解决方案。如有其他疑问,欢迎通过评论区交流讨论。持续学习,共同进步!
作者信息:
| 作者 | 华仔 |
|------|------|
| 联系方式 | who.seek.me@java98k.vip |
| 原文出处 | CSDN技术社区 |
| 版权声明 | 原创内容,转载请注明出处 |

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/9210.html

(0)
LomuLomu
上一篇 2025 年 5 月 12 日
下一篇 2025 年 5 月 12 日

相关推荐

  • 深入理解 Java 接口的回调机制

    前言 回调是一种非常重要的编程技术,它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中,回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式,以及实际开发中的应用场景。 泪崩了,期末JAVA编程考了回调,小编不会。 一、什么是回调? 回调(Callback) 是指通过将一个方法作为参数传递给另一个方法,在某些…

    2025 年 1 月 15 日
    51700
  • 【Java】还在死磕算法?懂“堆”与“优先级队列”,代码效率飙升

    欢迎 💛点赞 🌟收藏 💫关注 🏆堆 一、🎯堆的定义 堆的概念 堆是一种特殊的完全二叉树,它通过一维数组顺序存储关键码集合K={k0,k1,k2,…,kn-1},并遵循特定的顺序关系来定义。具体来说,若对于任意节点Ki,都满足Ki = 0; parent–) { siftDown(parent, usedSize); } } public void si…

    2024 年 12 月 27 日
    46200
  • 【Java 学习】Java的生命之源:走进Object类的神秘花园,解密Object类的背后故事

    💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持! 🚀 传播技术之美:期待您将这篇文章推荐给更多对需要学习Java语言、低代码开发感兴趣的朋友,让我们共同学习、成长! 1. Object 类 1.1 为什么所有类都继承 Object 类? 在Jav…

    2025 年 1 月 11 日
    29000
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 11 日
    49900
  • Python 潮流周刊#85:让 AI 帮你写出更好的代码(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 分享了 12 篇文章,12 个开源项目,1 则音视频,全文 2300 字。 以下是本期摘要: 🦄文章&教程 ① 如果一直要求 LLM “写出更…

    未分类 2025 年 1 月 12 日
    42300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信