Spring之IOC理解
IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
(——来自官方介绍)
————————————————————————————————————————————————————————
下面进行解释:
(————————图借用bilibiliUP主 黎曼的猜想————————)
我们在以前的代码中经常会用 new 来创建对象,如图业务层(services)在实现功能时,需要创建持久层(Dao)对象来调用方法。此时有两种方式来实现持久层对象的调用。
1.new
采用new 的方式进行创建Dao对象是我们常用的方式。但是这种方式是有弊端的,利用这种方式进行创建对象,会使代码的耦合性增强,service创建对象要过度依赖于Dao,代码的独立性差。
看图会更直观一点,我们的APP的请求会直接发给我们的资源,主动去索取所需要的相应资源。
2.工厂模式代理利用反射机制创建对象
采用工厂模式代理与new方式截然不同,我们这样做剥夺了service的主动索取资源的权力,他的资源由工厂去和资源索取,然后再返回给service使用。service此时是被动的,索取资源的工作由工厂接管。这样做的好处是我们使service摆脱对Dao的依赖,使代码独立起来,代码的耦合降低,依赖关系降低。
如图,APP与资源相互独立,APP需要资源时,由工厂去控制资源并提供资源给APP。断开APP和资源的依赖关系。这种思想,就是IOC的意义。
控制反转:就是控制权反转。最上面的图种,两种创建方式。第一种是业务层的自主控制,他拥有主动创建持久层对象的权力,可以自由创建他所需要的任何对象。第二种则就是业务层将创建对象的权力转移给Factory工厂,根据最后括号内的全限定性类名来控制创建的对象,而业务层是否需要和使用,业务层无权过问,全权交给工厂代理,工厂掌控权力。
提示:耦合无法完全避免,只能是尽可能消除。
Sping框架的IOC就是帮助我们在开发过程中降低耦合,并减轻我们手写工厂模式来降藕繁琐步骤产生的。