用最简单的方式理解 IoC 控制反转
思想引入
假设一个系统原先只设定有一个默认的方法去完成业务,这里举例这个原先设定开发的是 UserDaoImpl(可能有些牵强,但是不影响我们对逻辑的理解)这样一个业务。
后来有一天,需求变了,业务流程大改,这里举例改为 UerDaoOracleImpl,这时候我们可能需要修改 UserService中对Dao层的引用,即修改原理的UserDaoImpl为UerDaoOracleImpl。
再后来,用户需求又变了,比如来了个 UserDaoMysqlImpl,这时候可能有得修改代码了吧。
好吧,那改吧,但是呢又有一天产品经理跑过来说改回原来的第一种,emmmm
示意图如下:
既然这样,和不把这个修改权丢给用户呢?要是能把这个修改权交给用户自由适用,那我们是不是可以把节省下来的时间拿去学新的技术了呢?是不是让用户感觉更好了呢?
就这样IOC思想来了!
IOC思想
IoC,Inversion of Control,控制反转,是一种设计思想。
即把对象的创建,从原来的由原来的程序自己控制,变成了向外转给第三方/用户/容器来根据需要自定义管理创建。
举个和代码不是很相关的例子,例如以前的网站几乎都是只有一种风格,网站管理者设计的是什么样用户看到的就是什么样,但是现在不一样了,不少网站支持用户根据自己的喜好随意切换风格、皮肤,这也是控制反转思想的一种应用吧。
IOC简单应用
好,现在就简单的应用 IoC 这种思想来改变上图这的逻辑吧。
假设我们这里的 UserController就是对外(用户)的接口,即别的人/系统回从这里开始调用我们的业务逻辑。
现在我们就在这里直接接入用户需求,例如接口使用方说用 UserDaoMysqlImpl,好,那你就自己new一个UserDaoMysqlImpl对象传入我的预留的接口就行呗。
再过两天接口调用者又想用 UerDaoOracleImpl 这套了,也行,你自己set进去一个UerDaoOracleImpl就能调用我对UerDaoOracleImpl这套业务的支持了。
就这样,IoC 思想用上了,使用的人能按照自己的意思来了,我们也节省力气了。
示意图如下:
好了,到这里对IOC思想我们已经有了解了,那么Spring这个家伙又是怎么把IOC这种思想完美的应用了呢?
下一篇探讨:
最新文章
- PL/sql使用总结
- centos7 没有iptables服务 file or directory? 用secureCRT登录centos?
- Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)
- C++头文件的组织
- git使用流程
- PHP不仅仅是PHP
- POJ 1062 昂贵的聘礼 最短路 难度:0
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【PHP入门到精通】:Ch05:字符串处理
- c# 运算符 ?、??、?:
- 【Spark亚太研究院系列】Spark道路的真正的主人-第一章 构建Spark星团(第五步)(6)
- Java数据类型转换浅析
- Cordova各个插件使用介绍系列(一)—$cordovaSms发送短信
- windows环境下mysql密码重置
- C#中判断DataReader是否为空的代码
- Java大数相乘-hdu1063
- JavaScript事件监听以及addEventListener参数分析
- Informatica_(4)工作流
- list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
- lucene之中文分词及其高亮显示