目录
- 1.前言
- 2.`MapperFactoryBean` 概述
- 3.`MapperFactoryBean` 类的作用
-
- 3.1.`MapperFactoryBean` 源码
-
- 3.1.1.`FactoryBean` 接口的作用
- 3.1.2.`MapperFactoryBean` 中的 `getObject()`
- 3.1.3.`SqlSessionDaoSupport` 中的 `getSqlSession()`
- 3.1.4.`SqlSessionTemplate` 中的 `getMapper()`
- 3.1.5.`Configuration` 类的 `getMapper()`
- 3.1.6.`MapperRegistry` 类中的 `getMapper()`
- 3.1.7.`MapperProxyFactory` 类中的 `newInstance()`
- 3.1.8.`MapperProxy` 类的 `invoke()`
- 4.总结
1.前言
在 Spring
整合 MyBatis
的过程中,我们经常会配置注入 MapperFactoryBean
这个类
<bean id="mapperFactoryBean" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="net.itaem.dao.PersonDao"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
那么这个 MapperFactoryBean
类是干嘛的?有什么作用?
2.MapperFactoryBean
概述
MapperFactoryBean
是实现了FactoryBean
接口的工厂bean
- 你日常调用的
dao
层接口就是MapperFactoryBean
实例化的
为什么 dao
层接口能够执行,我们都知道接口是不能实例化的,答案只有一个那就是 MyBatis
帮我们代理了 dao
接口
3.MapperFactoryBean
类的作用
首先,看一下它的源码长啥样,分析它的源码
3.1.MapperFactoryBean
源码
它实现了一个很重要的 FactoryBean
接口
public class MapperFactoryBean<T> extends SqlSessionDaoSupport implements FactoryBean<T> {
private Class<T> mapperInterface;
private boolean addToConfig = true;
// 省略......
}
3.1.1.FactoryBean
接口的作用
分析 FactoryBean
接口,我们看到该接口共有三个方法需要实现,此处我们重点来关注一下 getObject()
方法
public interface FactoryBean<T> {
// 该方法用来获取bean,即从Spring IOC容器中获取创建的bean,会调用到该方法
@Nullable
T getObject() throws Exception;
@Nullable
Class<?> getObjectType();