session的getMapper方法解析

跟踪:
DefaultSqlSession类
public <T> T getMapper(Class<T> type) {
    return configuration.getMapper(type, this);
}

configuration的getMapper是
public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
    return mapperRegistry.getMapper(type, sqlSession);
  }

mapperRegistry的getMapper是
public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
    if (!knownMappers.contains(type))
      throw new BindingException("Type " + type + " is not known to the MapperRegistry.");
    try {
      return MapperProxy.newMapperProxy(type, sqlSession);
    } catch (Exception e) {
      throw new BindingException("Error getting mapper instance. Cause: " + e, e);
    }
  }
return MapperProxy.newMapperProxy(type, sqlSession);这句是创建接口的代理的。
进去可以看到
ClassLoader classLoader = mapperInterface.getClassLoader();
    Class<?>[] interfaces = new Class[]{mapperInterface};
    MapperProxy proxy = new MapperProxy(sqlSession);
    return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);

注意return这里,它是使用jse包的代理实现来做的。

你可能感兴趣的:(session)