IOC,即控制反转,它是一种设计思想。
举个示例:咱们都知道,在java程序中,每一个业务逻辑至少须要两个及以上的对象来协做完成,传统的作法是,对象A在使用它的依赖对象时,本身先new object(),而后new 一个依赖对象B,而后再操做A的方法,固然对象B做为方法的参数。咱们会发现:对象之间的耦合度比较高,当工程比较大时,这不是一个好现象。IOC的思想是:由spring容器来管理 对象之间的依赖关系,对象只须要关注本身的逻辑业务就行。
以下是更加通俗的解释:IOC,就是spring负责管理对象的生命周期和对象之间的关系。举例,咱们在淘宝上买一本书(例如:《spring入门》,xx著做,xx年出版,等等条件),一般的状况是,咱们是搜索书名,而后点进去看是否是xx著做的,若是是的话,再看是否是xx年出版的,接着……。这个过程是比较繁琐花时间的,在程序上的作法就是咱们本身设计和编码每个环节,即在对象A(搜索条件:书名)中使用对象B(排除条件:xx著做),就必须new A()对象,依赖类B(xx著做)和类C(xx年出版)来完成任务。那么IOC是怎么完成的呢,即在用户和淘宝之间引入了第三者(官方称之为 工厂类),它是一个条件工具,用户只须要向该工具中输入本身的条件(spring入门、xx著做、xx年出版),而后该工具根据用户的条件进行一系列的操做(官方:由spring初始化类、管理类之间的依赖关系),最后得出该用户所须要的书。更加智能点,用户设置好条件,每次启动系统后,都像用户推送该用户所须要的书,这就是控制反转,即本来应该是由用户来控制的,如今反过来由spring控制,用户只须要结果就行。
DI,即依赖注入。在spring中,系统启动的时候,spring须要处理对象的初始化和对象之间的依赖关系,这个依赖关系就是经过DI来实现的。列举实例:好比对象A须要操做数据库,即对象A依赖数据库对象,原来的作法是,系统启动后,new A()对象,而后在类A中写代码来得到connection对象。spring的作法是:系统启动以前,A告诉spring,须要一个connection对象,(官方:即在spring的配置文件中,先配置好类A和connection类),启动系统后,spring主动向类A推送connection对象,类A不须要知道connection对象是什么时候被建立的,只须要关注本身的业务,使用connection对象链接数据库就行。那么,DI是如何实现的呢?java 1.3以后有个重要的特性是反射,它容许程序在运行时动态的生成对象、执行对象的方法、设置对象属性的初始值。java