session的getMapper方法解析

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

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

mapperRegistry的getMapper是
public T getMapper(Class 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包的代理实现来做的。

你可能感兴趣的:(p.ibatis)