Spring IOC 与DI 心得
IOC: Inversion of Control 控制反转 是一种设计思想,意味着将你设计好的对象交给容器控制,而非传统的在对象内部直接控制。
IOC 控制了对象的创建,传统的是在对象内部new对象创建。
反转理解:传统的对象是由我们在程序中主动去控制对象的创建,叫做正传,那么被动由容器来创建及注入依赖对象的话叫做反转。
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 模式的实现。