IOC
控制反转IoC-Inversion of Control
IOC简介:
1.IOC是Spring Core最核心的部分
2.依托一个类似工厂的IoC容器
3.将对象的创建、依赖关系的管理以及生命周期交由IoC容器管理
4.降低系统在实现上的复杂性和耦合度,易于扩展,满足开闭原则
在学习IOC之前呢需要先了解依赖注入(Dependency Inversion)
以设计行李箱为例子
首先我们要设计出轮子的大小,然后再根据轮子的大小去依次设计出底盘、箱体、行李箱的大小。
这时候如果产品经理告诉我们轮子大小要修改变动,随之我们的后续都得重新设计。这样的话是不合理的。
在开发中,一个底层的类可能牵扯到成百上千个类,若是因为底层类的一点变动而改动上层所牵扯到的类。那将是很大的一个问题。
--------------------------------------------
随后我们将轮子的大小改为传参的形式,那带来的变动也是不小的。这样的设计是不可维护的。
用依赖注入DI实现控制反转
含义:把底层类作为参数传递给上层类,实现上层对下层的”控制”
我们根据行李箱来设计箱体,后根据箱体依次设计底盘、轮子。
此时依赖关系就倒置过来了。
IOC有两种实现方式:
1.DL实现方式:该方式对项目有侵入,需要用户对应API自己实现功能。(弃用)
2.Di实现方式:该方式为现在的主流,被许多大型公司广泛应用,其实现方式也有(Set注入、接口注入、注解注入、构造器注入)
IOC容器的优势
1.避免在各处使用new来创建类,并且可以做到统一维护
2.创建实例的时候不需要了解其中的细节
3.反射+工厂模式的合体,满足开闭原则
在我们要创建一个行李箱(Luggage)的时候,IOC会一层一层的往下寻找对应的依赖,当所有依赖找到后,再依次的往回构造注入。最终返回行李箱
日拱一卒无有尽,功不唐捐终入海