/** * 向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) { }
原文:https://www.cnblogs.com/shangxiaofei/p/12287593.html