思想引入

假设一个系统原先只设定有一个默认的方法去完成业务,这里举例这个原先设定开发的是 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这种思想完美的应用了呢?

下一篇探讨:

最新文章

  1. PL/sql使用总结
  2. centos7 没有iptables服务 file or directory? 用secureCRT登录centos?
  3. Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)
  4. C++头文件的组织
  5. git使用流程
  6. PHP不仅仅是PHP
  7. POJ 1062 昂贵的聘礼 最短路 难度:0
  8. Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
  9. 【PHP入门到精通】:Ch05:字符串处理
  10. c# 运算符 ?、??、?:
  11. 【Spark亚太研究院系列】Spark道路的真正的主人-第一章 构建Spark星团(第五步)(6)
  12. Java数据类型转换浅析
  13. Cordova各个插件使用介绍系列(一)—$cordovaSms发送短信
  14. windows环境下mysql密码重置
  15. C#中判断DataReader是否为空的代码
  16. Java大数相乘-hdu1063
  17. JavaScript事件监听以及addEventListener参数分析
  18. Informatica_(4)工作流
  19. list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
  20. lucene之中文分词及其高亮显示

热门文章

  1. swiper tabs综合示例
  2. Linux下scp命令
  3. 第09课:GDB 实用调试技巧(下)
  4. python 给多个变量赋值
  5. table头部固定,内容滚动,类似新闻一下向上滚动
  6. XML基础——extensible markup language
  7. C# 获取动态类中所有的字段
  8. Jmeter系列(29)- 性能指标(2) | 并发数
  9. php 扫描url死链接
  10. appium日志