Springp中SqlSessionFactoryBeanid不为sqlSessionFactory

<!-- 数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	<!-- SqlSessionFactory对象 -->
	<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- <property name="dataSource" ref="dataSource"></property> -->
		<property name="typeAliasesPackage" value="com.sxt.pojo"></property>
	</bean>
	<!-- 扫描器 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.sxt.mapper"></property>
		<!-- <property name="sqlSessionFactory" ref="factory"></property> -->
		<property name="sqlSessionFactoryBeanName" value="factory"></property>
	</bean>

全局配置属性为:default-autowire="byName"  自动注入

配置如上,可以正常运行,问题如下:

1. MapperScannerConfigurer不使用:<property name="sqlSessionFactory" ref="factory"></property>的原因在于

a.自动注入的优先级比较高,针对那些有类对象的属性的类,会优先加载

b.MapperScannerConfigurer中有很多对象属性的类,此时初始化sqlSessionFactory时,会寻找factory,而factory中有dataSource属性会自动注入名为dataSource的bean,但此时配置文件尚未加载,所以会报错。

c.而使用<property name="sqlSessionFactoryBeanName" value="factory"></property>相当于占位,因为sqlSessionFactoryBeanName是字符串类型

2. 基于上述解释,我不能理解为啥:SqlSessionFactoryBean中也有类对象的属性:dataSource,dataSource会自动注入id为dataSource的bean,此时配置文件就已经加载了???它为啥不报错可以加载配置文件???

 

配置文件应该是最先运行的吧,数据库连接要注入这些对象呢

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y