1.Spring IOC
IOC(Inversion of Control):控制反转,IOC是一种面向对象的设计思想,可以减低代码间的耦合度,其中最常见的方式叫做依赖注入(DI)。IOC意味着将你设计好的对象交给容器控制,而不是传统的在你对象内部控制
控制反转三个问题: 1.谁控制谁
2.控制了什么
3.为什么反转了
谁控制谁,控制什么:在传统Java代码中,我们直接在对象内部通过new创建对象,是程序主动去创建对象。而IOC中专门有一个容器来创建这些对象,即由IOC容器来控制对象的创建,主要控制外部资源的获取(不只是对象还包括文件等)
为什么反转了:有反转就有正转,传统应用程序是由我们在对象中主动控制去直接获取依赖对象,这就是正转。反转是由容器来帮忙创建并注入依赖对象,因为容器帮我们创建并注入依赖对象,对象只是被动接受依赖对象,所以是反转,依赖对象的获取被反转了
2.Spring DI
DI(Dependency Injection):依赖注入,在容器运行的时候,扫描所有的依赖关系,并为之动态的注入对应的依赖关系。依赖注入的目的并不是为软件系统带来更多的功能,而是为了提高组件重用的频率
依赖注入三个问题: 1.谁依赖谁
2.谁注入谁
3.注入了什么
谁依赖谁,谁注入谁:应用程序依赖IOC容器。IOC容器注入应用程序依赖的对象
注入了什么:注入某个对象所需要的资源
总结:
依赖注入是控制反转的一种实现方式,还有一种方式是依赖查找,这两个概念就是一个同一个概念的不同角度描述
3.IOC的优缺点
优点:由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不需要重新修改并编译具体的代码,从而实现组件之间的解耦,提高程序的灵活性和可维护性
缺点:创建对象的步骤变得复杂了,不直观
使用反射来创建对象,在效率上会有损耗
缺少IDE重构的支持,如果修改了类名,需要手动修改XML文件
4.什么是IOC容器?
IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象中的依赖