<!-- 数据源 -->
<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