org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mapper' defined in class path resource [applicationcontext.xml]: Cannot resolve reference to bean 'factory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'factory' defined in class path resource [applicationcontext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationcontext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [${mysql.driver}]
因为将factory的bean和mapper扫描的bean之间的依赖注入变为普通的属性注入,因为依赖注入>属性文件扫描>属性注入。如果不将factory和mapper扫描之间的依赖注入变为属性注入,会造成数据库参数还没有从配置文件中读取到容器中,就去进行mapper扫描了,会报数据库参数异常的错误。
原代码
<!--创建SqlSessinonFactory的bean--> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置mapper扫描--> <bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="factory"></property> <property name="basePackage" value="com.lzy.mapper"></property> </bean>
修改过后的代码
<!--创建SqlSessinonFactory的bean--> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置mapper扫描--> <bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="factory"></property> <property name="basePackage" value="com.lzy.mapper"></property> </bean>
即可