查看: 165|回复: 0

mybatis - mapper.java 的创建

[复制链接]
发表于 2020-2-19 17:34:44 | 显示全部楼层 |阅读模式
一. Mapper.java 创建过程

在前面注册 bean 的时候, 对beanClass 进行了替换, 为 MapperFactoryBean. 那么创建实例的时候, 会调用 MapperFactoryBean 的 getObject() 方法得到实例.
  1.   @Override  public T getObject() throws Exception {    return getSqlSession().getMapper(this.mapperInterface);  }  public SqlSession getSqlSession() {    return this.sqlSession;  }
复制代码
这里的的 SQLSession 就是 前面在设置类中创建的 SqlSessionTemplate 实例.
所以 getMapper 调用的就是 SqlSessionTemplate 的 getMapper 方法. 具体调用过程有点曲折, 最后会调用  MapperRegistry 的 getMapper 方法
  1.   // SqlSessionTemplate.java  @Override  public  T getMapper(Class type) {    return getConfiguration().getMapper(type, this);  } | |\|/
  2.   // Configuration.java  public  T getMapper(Class type, SqlSession sqlSession) {    return mapperRegistry.getMapper(type, sqlSession);  } | |\|/
  3.   // MapperRegistry.java  public  T getMapper(Class type, SqlSession sqlSession) {    final MapperproxyFactory mapperProxyFactory = (MapperProxyFactory) knownMappers.get(type);    if (mapperProxyFactory == null) {      throw new BindingException("Type " + type + " is not known to the MapperRegistry.");    }    try {      return mapperProxyFactory.[b]newInstance[/b](sqlSession);    } catch (Exception e) {      throw new BindingException("Error getting mapper instance. Cause: " + e, e);    }  }
复制代码
newInstance 调用的是  MapperProxyFactory 的方法:
复制代码
从这里可以看到, 对于 UserMapper.java 接口, 采用了 jdk署理 的方式来创建一个实例. 且署理处理类为:  MapperProxy


相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表