解决Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String问题
当mybatis-plus版本后为3.5.12时候会报出factoryBeanObjectType 属性写入了 String 类型值
因为我这个项目是ai生成的,不断改配置改错误,ai这点让我头疼,不断无中生有。
这几天折磨惨了,不断看日志,逐一排查,没想到是3.5.12版本有问题;所以说我们最好还是用稳定版本,像刚出的版本总会出各种不兼容的问题,总会出现各种问题
解决出factoryBeanObjectType 属性写入了 String 类型值
我基于以下几个方面进行了排查
-
Spring Boot 版本:
3.3.0 -
MyBatis-Plus 版本:
3.5.12 -
Redisson 版本:
3.27.0→ 升级至3.35.0 -
现象:应用启动时抛出
IllegalArgumentException,堆栈指向 Spring 内部FactoryBeanRegistrySupport,提示属性factoryBeanObjectType期望Class类型却收到String类型。 -
根本原因
Spring Framework 6.x(Spring Boot 3.x 默认使用)对
FactoryBean的元数据属性factoryBeanObjectType做了类型严格化处理——必须为Class<?>类型,而某些旧版依赖库(如 MyBatis-Plus 3.5.12 与 Spring Boot 3.3.0 的特定组合)在注册FactoryBean时仍写入字符串值,导致启动失败。🔧 排查步骤与结果
步骤 操作 结果 结论 1 检查并移除 PageHelper依赖错误依旧 非 PageHelper 引起 2 检查 @MapperScan的factoryBean属性未配置该属性 非 MyBatis 扫描配置问题 3 升级 Redisson 至 3.35.0并修正配置错误依旧 Redisson 已不是主因 4 临时排除 Redis 自动配置 错误依旧 非 Redis 自动配置冲突 5 降级 Spring Boot 版本至 3.2.12✅ 问题解决 Spring Boot 3.3.0 与 MyBatis-Plus 3.5.12 存在边缘兼容性问题 ✅ 最终解决方案
将 Spring Boot 版本降级至
3.2.12(或升级 MyBatis-Plus 至3.5.13+亦可,但降级 Spring Boot 更为稳妥,避免其他未知依赖冲突)。 -
经验总结与预防建议
-
Spring Boot 3.x 版本选型
-
生产环境建议使用 3.2.x 系列(长期支持版本),避免使用刚发布的
.0版本(如 3.3.0)与第三方依赖的潜在兼容性问题。 -
若必须使用最新版,务必检查所有关键依赖(MyBatis-Plus、Redisson、Quartz 等)是否发布了针对该版本的适配更新。
-
-
依赖版本一致性检查
-
使用
spring-boot-dependenciesBOM 管理依赖版本,避免手动指定与 Spring Boot 版本不兼容的传递依赖。 -
定期执行
mvn dependency:tree检查版本冲突。
-
-
异常定位技巧
-
遇到
factoryBeanObjectType类错误时,优先排查涉及FactoryBean的依赖(如 MyBatis-Plus、Redisson、Quartz、Spring Data Redis)。 -
开启
DEBUG日志可快速定位问题 Bean 名称,或使用 IDE 条件异常断点捕获具体上下文。
-
-
AI 生成项目的额外注意点
-
AI 可能混用不同版本的依赖声明,需人工审查
pom.xml中所有version标签的合理性。 -
对于 AI 自动编写的配置类(如
RedisConfig、MybatisPlusConfig),检查是否存在已过时的FactoryBean手动配置代码。
-
更多推荐


所有评论(0)