问题描述:
今天启动 Spring Boot 项目时,控制台报错如下:
java
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'activityController': Unsatisfied dependency expressed through field 'activityService': Error creating bean with name 'activityService': Unsatisfied dependency expressed through field 'activityMapper': Error creating bean with name 'activityMapper' defined in file [E:\idea_code\partner_match\target\classes\com\jade\partnermatch\mapper\ActivityMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [E:\idea_code\partner_match\target\classes\mapper\JoinRequestMapper.xml]'
完整错误信息显示 MyBatis 在解析 ActivityMapper.xml 文件时失败。
错误原因:
经过排查,发现是 XML 文件第一行之前存在空行 导致的。
MyBatis 在解析 XML 映射文件时,要求文件的第一行必须是 XML 声明:
java
<?xml version="1.0" encoding="UTF-8"?>
如果这行之前有任何字符(包括空格、空行、BOM头),XML 解析器就会报错。
解决方案:
-
打开
ActivityMapper.xml文件 -
检查第一行
<?xml version="1.0" encoding="UTF-8"?>之前是否有空行或空格 -
删除所有空行,确保 XML 声明在文件的第一行
-
重新编译项目(
mvn clean compile) -
重启应用
其他可能原因
如果删除空行后问题仍然存在,可以检查:
-
文件编码:确保使用 UTF-8 无 BOM 格式保存
-
XML 声明格式:确认语法正确,没有拼写错误
-
标签闭合:检查 XML 标签是否正确闭合
总结
这个小问题浪费了我不少时间,记录一下提醒自己:
XML 文件的第一行必须是
<?xml version="1.0" encoding="UTF-8"?>,前面不能有任何内容,包括空行!