首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ibatis源码学习记要-DefaultObjectFactory

2012-10-30 
ibatis源码学习记录-DefaultObjectFactoryDefaultObjectFactory:通过名字,可以看出,是默认的对象工厂,也就

ibatis源码学习记录-DefaultObjectFactory

DefaultObjectFactory:通过名字,可以看出,是默认的对象工厂,也就是创建对象,实现是通过反射实现,

比较核心的短创建对象方法:

?

?

private Object instantiateClass(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {    try {      Constructor constructor;      if (constructorArgTypes == null || constructorArgs == null) {        constructor = type.getDeclaredConstructor();        if (!constructor.isAccessible()) {          constructor.setAccessible(true);        }        return constructor.newInstance();      } else {        constructor = type.getDeclaredConstructor(constructorArgTypes.toArray(new Class[constructorArgTypes.size()]));        if (!constructor.isAccessible()) {          constructor.setAccessible(true);        }        return constructor.newInstance(constructorArgs.toArray(new Object[constructorArgs.size()]));      }    } catch (Exception e) {      StringBuilder argTypes = new StringBuilder();      if (constructorArgTypes != null) {        for (Class argType : constructorArgTypes) {          argTypes.append(argType.getSimpleName());          argTypes.append(",");        }      }      StringBuilder argValues = new StringBuilder();      if (constructorArgs != null) {        for (Object argValue : constructorArgs) {          argValues.append(String.valueOf(argValue));          argValues.append(",");        }      }      throw new ReflectionException("Error instantiating " + type + " with invalid types (" + argTypes + ") or values (" + argValues + "). Cause: " + e, e);    }  }

?

?

?

private Class resolveCollectionInterface(Class type) {    Class classToCreate;    if (type == List.class || type == Collection.class) {      classToCreate = ArrayList.class;    } else if (type == Map.class) {      classToCreate = HashMap.class;    } else if (type == Set.class) {      classToCreate = HashSet.class;    } else {      classToCreate = type;    }    return classToCreate;  }

热点排行