Spring IOC 与DI 心得

IOC: Inversion of Control 控制反转  是一种设计思想,意味着将你设计好的对象交给容器控制,而非传统的在对象内部直接控制。

        IOC 控制了对象的创建,传统的是在对象内部new对象创建。

 

        反转理解:传统的对象是由我们在程序中主动去控制对象的创建,叫做正传,那么被动由容器来创建及注入依赖对象的话叫做反转。

            比如: 传统的对象创建Spring IOC 与DI 心得转存失败重新上传取消Spring IOC 与DI 心得

                       IOC对象创建:Spring IOC 与DI 心得转存失败重新上传取消Spring IOC 与DI 心得

 

 

    IOC的功能:

                依赖注入(DI)  xml配置中的ref标签 对应spring的 RuntimeBeanRefence对象

                依赖检查

                自动装配

                支持集合

                指定初始化方法和销毁方法

                支持回调某些方法(需要实现spring接口,有侵入性)

 

    对于IOC来说,最重要的是容器,来控制Bean的生命周期,控制着Bean的依赖注入。

    Spring 设计了两个接口用以表示容器:

 

            BeanFactory    -- HashMap,key是Bean Name,Value是Bean的实例,

                                通常只提供 注册(put) 和 获取 (get) 两个功能,成为低级容器。

 

            ApplicationContext --  高级容器,继承了多个接口,具备多种功能,如 资源获取,支持多种消息等。

                                    定义了一个refresh 方法,重新刷新Bean。

IOC初始化过程--  就是 ClassPathXmlApplicationContext 构造过程

                CreateParentContext() ----> setParent()  ---> refresh() ---> refreshBeanFactory() ---> setEntityResolver()

                ----> 

DI:Dependency Injection  依赖注入

            组件之间的依赖关系由容器在运行期间决定,即容器动态的将某个依赖关系注入到组件中,目的是为了系统重用。

    IOC是为了控制到组件内的各种对象,DI则是动态向某个对象提供它所需要的其他对象通过DI来实现。

        DI的基础实现是java的反射机制。

        可以说 DI是spring实现 IOC 模式的实现。