Spring 报错 java.lang.IllegalArgumentException

在使用Spring3.2.0开发项目的过程中,在如下两个场景下遇到了报错java.lang.IllegalArgumentException的情况。

  1. Spring 3.2.0 + jdk1.8 注解注入,如
    (a)初始化
@PostConstruct
	public void init() {
		//initialization 
	}

(b)applcaitonContext.xml

<context:annotation-config />

经查,Spring 3.2.0 在注解注入情况下,不兼容jdk1.8。经过测试,将编译器换为1.7即可解决。

为了进一步测试,使用Spring4.0.0和jdk重构了工程测试,测试结果运行正常。

项目中用的Spring版本较低,应尽量避免类似这般兼容性等问题。

  1. 注入Date 对象

在遇到上述情况并将编译器换为1.7后,在注入Date对象过程中,再次遇到同样报错。

<bean id="dateFormat" class="java.text.SimpleDateFormat">
        <constructor-arg value="yyyy-MM-dd" />
</bean>

<bean id="*" class="*.*.*.*" parent="*">
		<property name="*" >
			 <bean factory-bean="dateFormat" factory-method="parse">
                <constructor-arg value="2018-12-27" />
            </bean>
		</property>
</bean>

同样使用Spring4.0.0和jdk重构了工程测试后,测试结果正常。

具体出现这个问题的原因还没真正搞清,是因为兼容性还是什么,在查文档中,等到查明再来更新。

谨此,祝好!

<think>好的,我现在需要解决用户提出的问题:在使用Spring Boot 3.2.0和MyBatis-Plus 3.5.5时,遇到了`java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String`的异常。用户希望得到解决这个问题的步骤和建议。 首先,我需要回忆一下这个错误出现的可能原因。根据用户提供的引用信息,特别是引用[3]和[4],这个错误通常是由于MyBatis的版本与Spring Boot 3.2不兼容导致的。具体来说,mybatis-spring的版本过低可能无法支持Spring Boot 3.2,从而导致类型不匹配的问题。在引用[4]中提到的官方ISSUE链接也指向了MyBatis Spring的GitHub问题,说明这是一个已知的兼容性问题。 接下来,我需要确认用户当前的依赖版本。用户提到使用的是MyBatis-Plus 3.5.5,但MyBatis-Plus本身依赖于mybatis-spring的版本。需要检查mybatis-spring的版本是否与Spring Boot 3.2兼容。根据MyBatis-Plus的官方文档,每个MyBatis-Plus版本都有对应的mybatis-spring版本要求。例如,MyBatis-Plus 3.5.5可能需要mybatis-spring 2.2.0或更高版本才能兼容Spring Boot 3.2。 另外,用户可能在项目中直接或间接依赖了较低版本的mybatis-spring,导致与Spring Boot 3.2中的新特性不兼容。例如,Spring Boot 3.2可能对某些Bean工厂的属性类型进行了更严格的验证,而旧版的mybatis-spring可能使用了不正确的类型(比如String而不是Class类型),从而触发该异常。 接下来,解决步骤可能包括以下几个方向: 1. 升级MyBatis-Plus到最新版本,因为新版本可能已经解决了与Spring Boot 3.2的兼容性问题。 2. 显式地升级mybatis-spring的依赖到兼容的版本,如2.3.0或更高,确保与Spring Boot 3.2兼容。 3. 检查依赖树,排除旧版本的mybatis-spring,防止版本冲突。 4. 参考官方ISSUE或文档,查看是否有其他配置需要调整。 另外,还需要考虑用户是否使用了正确的MyBatis-Plus配置,例如是否在启动类上添加了`@MapperScan`注解,或者配置类中是否正确设置了SqlSessionFactoryBean。不过根据错误信息,更可能的原因是依赖版本问题。 现在需要验证这些思路是否正确。查阅MyBatis-Plus的官方文档或GitHub仓库的发行说明,确认其兼容性信息。例如,MyBatis-Plus 3.5.5发布于什么时候,是否支持Spring Boot 3.2?如果MyBatis-Plus 3.5.5依赖的mybatis-spring版本过低,可能需要升级到更高版本的MyBatis-Plus,比如3.5.7或更高,或者单独升级mybatis-spring到兼容版本。 根据引用[4]中的链接,官方ISSUE提到可能需要升级到mybatis-spring 3.0.3或更高版本。但需要注意,mybatis-spring的主版本号是否与MyBatis-Plus兼容,因为mybatis-spring 3.x可能需要MyBatis 3.5.x以上,而MyBatis-Plus 3.5.x可能依赖于MyBatis的核心库版本是否匹配。 因此,可能的解决步骤是: 1. 升级mybatis-spring到3.0.3或更高版本。 2. 确保MyBatis-Plus的版本与mybatis-spring的新版本兼容。 3. 使用Maven或Gradle排除旧版本的依赖,并引入新版本。 如果用户使用的是MyBatis-Plus 3.5.5,可能需要同时升级到MyBatis-Plus 3.5.7或更高,因为MyBatis-Plus的版本可能已经适配了较新的mybatis-spring版本。或者,单独升级mybatis-spring依赖,例如: 在pom.xml中添加: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.3</version> </dependency> ``` 并排除旧版本的传递依赖。 此外,引用[3]中提到,用户可能已经尝试过升级mybatis-spring,但需要注意是否成功覆盖了传递依赖的版本。需要检查项目的依赖树,确认是否有其他依赖引入了旧版本的mybatis-spring,并使用Maven的dependency:tree或Gradle的dependencies任务来排查。 总结解决步骤: 1. 升级mybatis-spring到兼容版本(如3.0.3+)。 2. 升级MyBatis-Plus到与mybatis-spring兼容的版本。 3. 检查并排除旧版本的依赖。 4. 如果问题依旧,检查项目配置,确保没有错误的Bean定义。 最后,用户可能需要参考MyBatis-Plus和Spring Boot的官方文档,确保所有相关依赖的版本兼容性。此外,参考官方ISSUE中的讨论,可能还有其他解决方案或补丁。</think>### 解决Spring Boot 3.2.0与MyBatis-Plus 3.5.5的`factoryBeanObjectType`异常 #### 问题原因分析 该异常是由于Spring Boot 3.2对Bean工厂属性的类型校验更严格,而低版本的`mybatis-spring`(如2.x)在定义`SqlSessionFactoryBean`时可能使用了`String`类型而非`Class<?>`类型,导致类型不匹配[^3][^4]。 --- #### 解决步骤 1. **升级`mybatis-spring`依赖** 修改`pom.xml`或`build.gradle`,显式指定`mybatis-spring`版本为**3.0.3**或更高(与Spring Boot 3.2兼容): ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.3</version> </dependency> ``` 2. **检查MyBatis-Plus版本兼容性** MyBatis-Plus 3.5.5依赖的`mybatis-spring`版本可能较低。建议升级到**MyBatis-Plus 3.5.7+**(截至2024年1月,3.5.7已支持Spring Boot 3.2): ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> </dependency> ``` 3. **排除旧版本依赖(如有冲突)** 使用Maven的`exclusion`标签排除低版本`mybatis-spring`: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> <exclusions> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </exclusion> </exclusions> </dependency> ``` 4. **验证依赖树** 执行以下命令检查依赖版本是否生效: ```bash mvn dependency:tree | grep mybatis-spring ``` 5. **配置检查(可选)** 确保启动类或配置类正确使用`@MapperScan`注解: ```java @SpringBootApplication @MapperScan("com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- #### 验证结果 若问题仍未解决,可参考MyBatis官方ISSUE讨论或尝试以下操作: - 清理构建缓存(`mvn clean`或`gradle clean`) - 检查Spring Boot其他依赖是否兼容(如Spring Framework版本) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值