reflection包下的factory包是一个对象工厂包,该包的类用来基于反射生产处各种对象。
1.ObjectFactory接口中有以下几个方法
(1)<T> T create(Class<T> type);
根据该类型的无参构造创建实例
(2)<T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs); 第一个参数是类型 第二个参数类型列表 第三个参数值列表。 该方法作用是根据类型列表找到对应的构造器并创建实例
(3)isCollection 判断传入的是否是集合
2.DefaultObjectFactory 是ObjectFactory接口的默认实现
从源码可见,两个create实现都调用了instantiateClass方法,instantiateClass方法的逻辑很简单,如果构造参数类型列表或构造器参数为空,就通过反射调用class的无参构造创建实例,否则就根据类型列表找符合的有参构造并创建实例
/**
* 创建类的实例