SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

2024-07-11 1951阅读

1. 导入相关依赖

    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        3.0.2
    
    
        com.mysql
        mysql-connector-j
        runtime
    

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

2. 项目启动报错

java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getTypeForFactoryBeanFromAttributes(FactoryBeanRegistrySupport.java:86) ~[spring-beans-6.1.6.jar:6.1.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:837) ~[spring-beans-6.1.6.jar:6.1.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:652) ~[spring-beans-6.1.6.jar:6.1.6]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:575) ~[spring-beans-6.1.6.jar:6.1.6]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:534) ~[spring-beans-6.1.6.jar:6.1.6]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:138) ~[spring-context-6.1.6.jar:6.1.6]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.6.jar:6.1.6]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.6.jar:6.1.6]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.5.jar:3.2.5]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.5.jar:3.2.5]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.5.jar:3.2.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.5.jar:3.2.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.5.jar:3.2.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.5.jar:3.2.5]
	at cn.xsu.boot.mybatis.SpringBoot01MybatisApplication.main(SpringBoot01MybatisApplication.java:11) ~[classes/:na]

3. 原因分析

项目中使用 mybatis-spring-boot-starter 是 3.0.2 版本,其中依赖的 mybatis-spring 的版本为 3.0.2 。

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

在 mybatis-spring 3.0.2 版本的 ClassPathMapperScanner#processBeanDefinitions 方法里将 beanClassName 赋值给 String 类型的变量 。

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

并将 beanClassName 赋值给 factoryBeanObjectType 。

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

但是在 SpringBoot 3.2.5 版本中 FactoryBeanRegistrySupport#getTypeForFactoryBeanFromAttributes 方法已变更,如果 factoryBeanObjectType 不是 ResolvableType 或 Class 类型会抛出 IllegalArgumentException 异常。此时因为 factoryBeanObjectType 是 String 类型,不符合条件而抛出异常。

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

4. 解决方案

方法 1 :手动升级 mybatis-spring 版本为 3.0.3 。

    
        org.springframework.boot
        spring-boot-starter-web
    
    
      org.mybatis
      mybatis-spring
      3.0.3
    
    
        com.mysql
        mysql-connector-j
        runtime
    

方法 2 :mybatis-spring-boot-starter 的版本切换为 3.0.3 。

    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        3.0.3
    
    
        com.mysql
        mysql-connector-j
        runtime
    

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

5. 重启项目

SpringBoot 3.2 整合 MyBatis 报错 Invalid value type for attribute ‘factoryBeanObjectType‘:String 的解决方案

项目成功启动!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]