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


相关文章
|
8月前
|
SQL 前端开发 Java
理清SpringBoot CURD处理逻辑、顺序
理清SpringBoot CURD处理逻辑、顺序
125 0
|
存储 设计模式 负载均衡
一文读懂Spring动态配置多数据源---源码详细分析(下)
一文读懂Spring动态配置多数据源---源码详细分析
2150 0
一文读懂Spring动态配置多数据源---源码详细分析(下)
|
3月前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
57 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
缓存 Java 数据安全/隐私保护
Spring 循环依赖问题解决方案以及简要源码流程剖析
Spring 循环依赖问题解决方案以及简要源码流程剖析
127 0
|
SQL Java 数据库连接
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】(二)
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】
209 0
|
XML 缓存 Java
【spring源码系列-02】通过refresh方法剖析IOC的整体流程
【spring源码系列-02】通过refresh方法剖析IOC的整体流程
141 0
|
XML 缓存 Java
初步走入 Spring 事务底层核心前置源码(下)
初步走入 Spring 事务底层核心前置源码(下)
94 0
|
XML 存储 缓存
初步走入 Spring 事务底层核心前置源码(上)
初步走入 Spring 事务底层核心前置源码
107 0
|
SQL 存储 Java
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】(一)
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】
650 0
|
设计模式 Java Spring
【Spring】核心部分之AOP:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心AOP,AOP有这一篇足以
【Spring】核心部分之AOP:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心AOP,AOP有这一篇足以

热门文章

最新文章