/**
* 向spring容器真正实例化1个对象的大致算法模板
* @param a
* @return
*/
public Object createObject(Class a) {
//step1:根据类型获取该类型的实例
Object o = createInstance(a);
//step2:根据类型获取该对象要注入的所有属性
List<Class> classes = getObjectByAutoWrite(a);
if (CollectionUtils.isEmpty(classes)) {
//无注入属性,则退出递归
return o;
}
//step3:创建依赖对象的实例
for (Class cls : classes) {
//从上下文或全局对象容器里,判断对象是否已经实例化了。[解决重复创建对象的问题,以及循环依赖的问题]
Object o1 = isAlreadyCreateObject(cls);
if (o1 == null) {
o1 = createObject(cls);
}
//step4:写入依赖
doAutoWrite(o, o1);
}
return o;
}
/**
* 创建类对象的实例
*
* @param a
* @return
*/
public Object createInstance(Class a) {
Object object = null;
try {
object = a.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return object;
}
/**
* 从上下文或全局对象中判断当前类是否已经创建对象
* 如已创建,返回对象实例
* 如无创建,返回null
*
* @param a
* @return
*/
public Object isAlreadyCreateObject(Class a) {
return null;
}
/**
* 获取当前类需要spring完成注入的对象集合
*
* @param a
* @return
*/
public List<Class> getObjectByAutoWrite(Class a) {
return null;
}
/**
* 写入依赖
*
* @param o 被依赖的对象
* @param depend 依赖的对象
*/
public void doAutoWrite(Object o, Object depend) {
}