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


相关文章
|
10月前
|
SQL 前端开发 Java
理清SpringBoot CURD处理逻辑、顺序
理清SpringBoot CURD处理逻辑、顺序
137 0
|
Java 程序员 Spring
一文读懂 Bean的生命周期
一文读懂 Bean的生命周期
157 0
|
10月前
|
Java Spring
Spring5源码(43)-@Transactional声明式事物(一)事物管理步骤简析
Spring5源码(43)-@Transactional声明式事物(一)事物管理步骤简析
59 0
|
6月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
483 24
|
8月前
|
存储 缓存 安全
Spring初始化加速的思路和方案问题之手动指定要异步初始化的bean中的问题如何解决
Spring初始化加速的思路和方案问题之手动指定要异步初始化的bean中的问题如何解决
|
XML 缓存 Java
【spring源码系列-02】通过refresh方法剖析IOC的整体流程
【spring源码系列-02】通过refresh方法剖析IOC的整体流程
144 0
|
XML 缓存 Java
初步走入 Spring 事务底层核心前置源码(下)
初步走入 Spring 事务底层核心前置源码(下)
117 0
|
XML 存储 缓存
初步走入 Spring 事务底层核心前置源码(上)
初步走入 Spring 事务底层核心前置源码
111 0
|
SQL 存储 Java
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】(一)
mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】
758 0
|
XML Java 数据格式
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
140 0