首先,我们要知道Java应用程序的每个逻辑业务的完成需要多个类的相互合作。例如有一个Student对象需要使用Course对象,通常需要在Student对象中new一个Course对象,然后再调用Course对象的相关属性或者方法,但是也可以看出对象之间的耦合度高了。Spring的IOC的想法就是由Spring容器来控制以来对象的创建和销毁,例如当Student对象需要使用Cousrse时候,Student类中声明Course类型的对象引用(前面加上注解@Autowired),程序运行时候由Spring容器创建一个Course对象,并将该对象传给Student。也就是说由Spring容器控制对象的生命周期和对象之间的关系。

      IOC——Inverse of Control 控制反转的意思就是说,当一个对象需要使用它的依赖对象时候,不再自己负责依赖对象的创建和销毁,而是由Spring容器来控制,所以称之为控制反转。

      IOC说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际上就是你在XML文件中控制,侧重于原理。

     DI——Dependency Injection 依赖注入,其实表达的思想和IOC是一样的。只不过所站的角度不同。Martin Fowler提出一个问题:控制的什么被反转了?就是获得依赖对象的方式被反转了。这就是依赖注入,即依赖对象的获取需要Spring容器注入。

        DI说的是创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现。

      好处:

      1.通过IOC/DI,我们可以看到对象之间的耦合度降低了。

      2..通过Spring容器实现了资源的可配置和易管理。