IOC 怎么逻辑回答

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

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

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容器在运行期间,动态的将某种依赖注入到对象之中,提升了组件重用的频率,为系统搭建一个;灵活、可扩展的平台。


相关文章
|
6天前
|
缓存 算法 安全
Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的
Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的
24 0
|
6天前
|
SQL 前端开发 Java
理清SpringBoot CURD处理逻辑、顺序
理清SpringBoot CURD处理逻辑、顺序
82 0
|
8月前
|
NoSQL Redis
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
33 0
|
10月前
|
缓存 Java 数据安全/隐私保护
Spring 循环依赖问题解决方案以及简要源码流程剖析
Spring 循环依赖问题解决方案以及简要源码流程剖析
93 0
|
11月前
|
XML Java 数据格式
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
|
11月前
|
设计模式 Java Spring
【Spring】核心部分之AOP:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心AOP,AOP有这一篇足以
【Spring】核心部分之AOP:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心AOP,AOP有这一篇足以
|
前端开发
前端学习案例3-Aop切面编程3 原
前端学习案例3-Aop切面编程3 原
45 0
前端学习案例3-Aop切面编程3 原
|
前端开发 Java 网络架构
「推荐收藏!」【Spring源码探究】(一)MVC容器初始化🏅彻底让你明白运行原理和源码流程
「推荐收藏!」【Spring源码探究】(一)MVC容器初始化🏅彻底让你明白运行原理和源码流程
82 0
|
XML 设计模式 Java
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
104 0
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
|
存储 SQL Java
Spring事务管理的底层逻辑—源码解析
首先进入CglibAopProxy.class的intercept方法打上一个Debug断点调试,或者在JdkDynamicAopProxy.class的invoke方法(如果目标方法是继承接口方式实现),根据不同实现方法类型选择不同的动态代理类
Spring事务管理的底层逻辑—源码解析