控制反转,和依赖注入是同一个意思,我觉得应该重点去了解什么是依赖,而后控制反转、依赖注入就有体会了;关于依赖,可以查看UML相关的书籍,重点去看java对象之间的关系是怎样的,而所谓的依赖就是对象之间的一种关系,比如a对象依赖于b对象,那么a类中就会有b类的引用(简单理解就是拥有b类的这么一个属性),也就是说a对象要想执行一个完整的功能,必须建立一个前提——a对象中的b类属性已经实例话,并且拥有b类的一切功能;现在可以去了解什么是依赖注入了,就像前面说过的,a对象想完成一个完整的功能,要先为自己的b类属性实例化。
而在MVC模式中,这种现象很常见,为了简化这种实例化的工作,spring容器就产生了,它可以统一管理这种实例化频繁的操作,就是说这种本来应由自己实例化的工作交给Spring容器去控制了,也就是说控制反转了,实现的方案之一是在上述a类中提供一个关于b类的setter方法,这个方法会被Spring容器控制。
我们要知道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容器实现了资源的可配置和易管理。
网友评论