谈谈对IOC的理解

通常,我们认为Spring有两大特性IOC和AOP,那么到底该如何理解IOC呢?实际上这是一个非常大的问题,所以我们就把它拆分了来回答,IOC表示控制反转,那么:

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

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

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

这就是解决这一类大问题的思路,大而化小。

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

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

1.建一些类,比如UserService、OrderService

2.用一些注解,比如@Autowired

但是,我们也知道,当程序运行时,用的是具体的UseService对象,OrderService对象,那这些对象是什么时候创建的?谁创建的?包括这些对象里的属性是什么时候赋值的?谁赋的?所有这些都是我们程序员做的,以为我们只是写了类而已,所有的这些都是Spring做的,它才是幕后黑手。

这就是控制

1.控制对象的创建

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

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

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

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

比如,现在有三个类:

1.A类,A类里有一个属性C c;

2.B类,B类里也有一个属性C c;

3.C类

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

1.Aa=newA();

2.Bb=newB();

3.Cc=newC();

4.a.c=c;

5.b.c=c;

这五行代码是不用Spring的情况下多出来的代码,而且,如果类再多一些,类中的属性再多一些,那相应的代码会更多,而且代码会更复杂。所以我们可以发现,我们自己控制比交给Spring来控制,我们的代码量以及代码复杂度是要高很多的,反言之,将对象交给Spring来控制,减轻的程序员的负担。

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

相关推荐
Wang's Blog1 分钟前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
Wang's Blog12 分钟前
Java框架快速入门: Spring Security+OAuth2之多因子认证与TOTP实战
java·spring·ui
滕州市燕猫虎计算机科技工作室个体工商户30 分钟前
Java面试题汇总
java·开发语言
2301_32241428042 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
君顾12 小时前
外卖CPS软件开发实战:从系统架构到部署全流程指南
java·开发语言·外卖
vx_Biye_Design2 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜3 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云3 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程3 小时前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言