【spring源码学习】spring如何完成IOC容器构建

一、整体思路

1、整体思路

2、整理思路的算法抽象

/**
     * 向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) {

    }
View Code

猜你喜欢

转载自www.cnblogs.com/shangxiaofei/p/12287593.html