likes
comments
collection
share

IOC 怎么逻辑回答

作者站长头像
站长
· 阅读数 16

前言

面试的时候如果这样回答这个问题 会感觉很干吧 也体现不出来你的能力 需要更有逻辑性的回答

Ioc全称inversion of control,即控制反转,指将对象的创建、销毁等的控制权交由Spring框架的Ioc容器进行管

理,以往的JavaEE程序设计的对象创建时通过new来完成的,需要我们主动去创建。而Ioc就是一个大工厂,现在不需

要我们手动去new创建一个对象,需要时可以直接通过反射的机制来注入对象,同时也不需要我们主动去销毁对 象,

Spring框架帮我们进行了统一的管理。Dl依赖注入有三种实现方式,一种接口注入已经被淘汰了,另外两种一个是属性setter注入方式,Spring通过无参构造或无参静态工厂方法实例化Bean对象后, 再通过调用该Bean的setter方法实现注入

第二种是构造注入,Spring直接通过调用有参的构造方法实现依赖注入,每一个参数就是一个依赖

进阶回答

IOC就是控制反转,是spring的两大特性之一,它仅仅是一种设计思想,而不是一种具体的技术实现

在spring中,控制反转是指将对象的控制权转移给spring框架进行处理,由spring框架帮我们创建对象

管理对象间的依赖关系,很大程度上简化了应用的开发,降低了对象之间的依赖程度和耦合度

便于资源的管理,在IOC容器中,所有的对象默认都是单例的。

IOC最常见以及最合理的方式就是依赖注入(DI)。

IOC容器

实际上就是一个MAP(键值对),里面存放的是各种对象(来自在xml文件中配置的bean节点,包含@Repository、@Service、@Controller、@Component注解的类),

在项目启动时,会读取配置文件中的bean节点,根据限定类名使用反射创建对象放到MAP里面

还会扫描含有上述注解的类,同样使用反射创建对象到MAP里面

此时MAP里面就有各种对象了,接下来的代码中需要使用到里面的对象时,在通过DI依赖注入,

在项目启动时会读取配置文件xml里面bean节点的ref属性,根据id注入,id就是对象名。

控制反转

通俗讲就是我们不用自己创建实例对象,都交给spring的bean工厂帮我们创建管理,

这也是spring的核心思想,通过面向接口编程的方式来实现对业务组件的动态依赖。没有引入IOC容器之前,

对象A依赖对象B,那么对象A就需要主动创建对象B或者使用一斤创建的对象B,控制权在自己手里

引入IOC容器之后,对象A与对象B失去了直接联系当对象A需要对象B时IOC容器会主动创建一个对象B注入到对象A需要的地方

通过前后对比,可以看到对象A获得依赖对象B的过程,由主动行为变成了被动行为,控制权颠倒了过来,这就是控制反转的由来全部对象的控制权都由IOC容器,所以IOC容器变成了系统核心

依赖注入

控制被反转之后,获得依赖对象的过程,由自身管理变成了IOC容器注入,依赖注入就是实现IOC的方法,就是由IOC容器在运行期间,动态的将某种依赖注入到对象之中,提升了组件重用的频率,为系统搭建一个;灵活、可扩展的平台。