浅谈IOC
什么是IOC?
IOC(Inversion Of Control,控制倒转),是spring的核心,贯穿始终,所谓IOC,对spring来说,就是由spring来负责对象的生命周期和对象间的关系。所有的类都会在spring容器中登记,告诉spring你是个什么,你需要什么,然后spring会在系统运行到适当的时候,把你需要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制。也就是说控制对象生命周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有的对象都被spring控制,所以这叫控制反转。
IOC的主要作用是什么?
IOC理论提出的观点大体是:借助于“第三方”实现具有依赖关系的对象之间的解耦,那么问题来了,什么是解耦呢?
扩充话题
解耦通俗地说就是两个东西原来相互影响,现在让他们独立发展,核心思想还是最小职责,每个地方都只做一件事,只要一个地方负责了多项事情,就存在解耦的可能。在系统每个层次都可以体现解耦的思想,比如在架构层面把存储和业务逻辑解耦,把动态页面和静态页面解耦,在模块层把业务模块和统计模块解耦,在代码层把多个功能解耦等等。解耦的思想很好,但是没必要为了解耦而解耦,还是要从业务需求以及系统定位出发,满足一段时间内系统发展的需求即可。简单通俗的理解就是:电脑拔掉键盘鼠标显示器依然可以运行,这就是解耦
什么是控制反转?
就相当于,假如有a和b两个对象,在没有控制反转之前,a依赖于b,那么b对象在a初始化或者运行到某一处的时候,必须主动的去创建b对象或者使用已经创建好的b对象,无论是创建还是使用,控制权都在a手上;而通过控制反转之后,a和b之间就是去了直接的联系,a和b都交由“第三方”管理,当对象a需要对象b的时候,“第三方”会主动创建或把已存在的对象b注入到a需要的地方。其实通过这个举例可以很明显的就看出来,对象a获得对象b的过程,由主动行为变成了被动行为,控制权颠倒过来了,这就是“控制反转”这个 名称的由来
什么是依赖注入?
依赖注入让bean与bean之间以配置文件组织在一起,而不是通过硬编码的方式耦合在一起,依赖注入是对控制反转的具体实现,从代码曾对两个依赖的“对象”进行解耦
IOC可以给我们带来什么好处?
第一:资源集中管理,实现资源的可配置和易管理
第二:降低了使用资源双方的以来程度,也就是所谓的解耦