面试官:谈谈自己对IOC和AOP的理解? Part1
IOC(Inversion of control):即控制反转(反转控制)(具体含义后面会讲)。它是一种控制思想而不是一种技术,DI是它的实现方式之一。描述的是:Java对象的创建及管理问题。
首先:我们在开发中会面临一个问题。那就是对象之间的高度耦合。就比如三层架构中Service层用用Dao层,就必须通过在自己内部new一个Dao层对象出来,那么问题来了:如果Dao层的实现类发生更改,那就得修改Service层的实现类对象,这就属于硬编码了,就是因为通过new这种方法,两层架构之间的耦合度太高。如果你要说一个实现类说改也就改了,那么如果20个,30个呢?所以IOC出现了,IOC不通过new关键字来创建对象,而是通过IOC容器(spring框架)来帮助我们实例化对象,我们需要哪个对象直接去取就行(前提要进行bean的定义),IOC相较于传统方式(new)来说,丧失了创建,管理对象的权利,所以当我们需要使用对象的时候,直接取就行,拿上述问题来说,我们不需要修改源码,直接依赖注入即可。
那什么是控制反转呢?
控制:Java对象的创建和管理权利。
反转:将本属于我们的上述权利反转交给IOC容器
这是极为方便的,因为在实际开发中,我们并不需要关心对象的创建,我们只需要做一个衣来伸手,饭来张口的小fw就行,需要什么,直接从IOC中拿来用就行。所以IOC降低了对象之间的耦合度,使资源变得容易管理。
既然说到了IOC,那就必须得提一下DI!!!
DI(Dependency Injection):即依赖注入,由容器动态的将某个依赖关系注入到组件当中。依赖注入的目的并非为软件系统带来更多的功能,而是提升了组件重用的频率,并未软件系统搭建一个灵活,可扩展的平台。IOC会动态的向某个对象提供他所需要的对象,这一点就是通过DI实现的,通俗来讲,我们向IOC容器索取我们需要的对象,那IOC容器就会通过DI给我们。那DI是如何实现的呢?反射(以后会讲)
所以IOC是一种思想,而DI是一种技术或实现方式。
下一篇我们来聊一聊AOP,参考JavaGuide。