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; }