什么是IOC
在面试或者学习Spring过程中老是提及到IOC,但是IOC是什么呢?IOC(Inversion of control)译成中文就是控制反转的意思。字面上的意思估计第一次接触也是一脸闷逼。这里先不说它的定义,毕竟说了刚接触也不是太明白。简单的说就是:IOC是一种思想而不是一种技术实现。下面举个简单的例子就可以说明了。
现在我们有一个UserService类需要依赖UserDao类,我们分别用传统的思想来处理。
传统思想:在UserService类中手动new一个UserDao类的实例。
IOC思想:我们不通过手动new的方式去创建一个UserDao的实例,而是从容器中去获取或者容器帮我们注入。
上面的两种方式都能解决问题,不同的点在于我们对于UserDao实例的管理权限不一样,传统思想的做法,管理权在我们自己手中,而IOC这种思想,UserDao实例的管理权在容器手中。
为什么叫控制反转
上面说了传统思想和IOC思想的区别,其中最大的区别在于控制权的变更。控制这里指的就是实例的管理,反转指的就是权力的变更,由依赖实例UserService本身变成容器。所以这就是控制反转这个词的由来。
为什么要使用IOC
简单的说有下面的几点好处:
- 对象之间的耦合度降低,简单点说就是复杂度降低。
- 资源管理实现可配置,管理更容易。
对于第一点,如果UserService它依赖的不仅仅只有UserDao,同时还要依赖其他更多的类时,对于这些依赖的处理就会变得非常棘手。对于第二点,如果你之前的一个UserDao的实现类为UserDbDaoImpl,而需要更换新的实现UserRedisDaoImol。如果没有使用IOC,你需要一个个修改依赖了UserDao的类,这将是一个巨大的工作量。
什么是依赖注入(DI)和依赖查找
Spring就是IOC的实现,而实现了IOC的不仅仅只有Spring。而Spring在这方面的做的比较优秀,同时生态环境也是最好的。前面说了IOC是一种编程思想,而Spring只是其中的一个实现。实现IOC的方式有很多中,在Spring中使用最多的就是依赖注入,即常说的DI。而依赖查找也是实现的方式之一,只不过在Spring中使用的不如依赖注入多而已。简单的说就是:依赖注入和依赖查找是Spring实现IOC这种编程思想的技术方式。
网友评论