面试题必备-谈谈你对IOC的理解

本文解释了Spring框架中的IoC(控制反转)概念,包括控制的定义、反转过程,以及为什么选择控制反转。通过实例说明了不使用Spring时手动管理对象创建和属性赋值的复杂性,突显了IoC在简化代码和降低程序员负担方面的优势。
摘要由CSDN通过智能技术生成

通常,我们认为Spring有两⼤特性IoC和AOP,那到底该如何理解IoC呢?

对于很多初学者来说,IoC这个概念给⼈的感觉就是我好像会,但是我说不出来。

那么IoC到底是什么,接下来来说说我的理解,实际上这是⼀个⾮常⼤的问题,所以我们就把它拆细了 来回答,IoC表示控制反转,那么:

1. 什么是控制?控制了什么?

2. 什么是反转?反转之前是谁控制的?反转之后是谁控制的?如何控制的?

3. 为什么要反转?反转之前有什么问题?反转之后有什么好处?

这就是解决这⼀类⼤问题的思路,⼤⽽化⼩。

那么,我们先来解决第⼀个问题:什么是控制?控制了什么?

我们在⽤Spring的时候,我们需要做什么:

1. 建⼀些类,⽐如UserService、OrderService

2. ⽤⼀些注解,⽐如@Autowired

但是,我们也知道,当程序运⾏时,⽤的是具体的UserService对象、OrderService对象,那这些对象 是什么时候创建的?谁创建的?包括对象⾥的属性是什么时候赋的值?谁赋的?所有这些都是我们程序 员做的,以为我们只是写了类⽽已,所有的这些都是Spring做的,它才是幕后⿊⼿。

这就是控制

1. 控制对象的创建

2. 控制对象内属性的赋值

如果我们不⽤Spring,那我们得⾃⼰来做这两件事,反过来,我们⽤Spring,这两件事情就不⽤我们做 了,我们要做的仅仅是定义类,以及定义哪些属性需要Spring来赋值(⽐如某个属性上加 @Autowired),⽽这其实就是第⼆个问题的答案,这就是反转,表示⼀种对象控制权的转移。

那反转有什么⽤,为什么要反转?

如果我们⾃⼰来负责创建对象,⾃⼰来给对象中的属性赋值,会出现什么情况?

⽐如,现在有三个类:

 1. A类,A类⾥有⼀个属性C c;

2. B类,B类⾥也有⼀个属性C c;

3. C类

现在程序要运⾏,这三个类的对象都需要创建出来,并且相应的属性都需要有值,那么除开定义这三个 类之外,我们还得写:

1. A a = new A();

2. B b = new B();

3. C c = new C();

4. a.c = c; 5.

b.c = c;

这五⾏代码是不⽤Spring的情况下多出来的代码,⽽且,如果类在多⼀些,类中的属性在多⼀些,那相 应的代码会更多,⽽且代码会更复杂。所以我们可以发现,我们⾃⼰来控制⽐交给Spring来控制,我们 的代码量以及代码复杂度是要⾼很多的,反⾔之,将对象交给Spring来控制,减轻了程序员的负担。

总结⼀下,IoC表示控制反转,表示如果⽤Spring,那么Spring会负责来创建对象,以及给对象内的属 性赋值,也就是如果⽤Spring,那么对象的控制权会转交给Spring。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值