当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-dependencies BOM 管理依赖版本,避免手动指定与 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 手动配置代码。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐