如何真正理解SpringIOC原理,有谁理解的更深层点。
之前我看各种代码也不理解,后来看了一篇博文就懂了,个人觉得比各种示例代码都有用:客户程序员使用库,框架使用客户程序员。这就是控制是否被反转了的区别。控制反转是框架和库的关键区别所在。对于一个库而言,用户程序员使用的方式是主动调用它,这是通常情况的做法,也就是“正向”控制;而对于一个框架,往往将用户程序员编写的代码注册到框架中,最后由框架来调用用户程序员编写的代码,这就构成了控制反转。也就是说,控制反转的关键在于“控制者”是谁。对于一个库而言,复用的可能只是算法和数据结构;而对于一个框架而言,复用的往往还有控制流逻辑,这也是控制反转的结果。
简单浏览了大家推荐的文章,主要是从代码的角度做说明。换个角度,用 UML 图可能更直观一些。
无 IoC 代码的类图
IoC 代码的类图
通过 Developer 接口实现的「控制反转」,Project 和 PhpDeveloper 都信赖于 Developer Interface
这个结构也正是面向对象设计原则中的「接口隔离」
使用这个结构之后,在 Project 中创建 PhpDeveloper 的职责谁来做?使用「工厂模式」或「信赖注入」都可以
推荐这本《敏捷软件开发——原则、模式与实践》
4 回答1.6k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
4 回答2.1k 阅读
2 回答791 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.4k 阅读
先看下没有IOC的情况:
可以看到Project是依赖于JavaDeveloper的,这时如果需求突然变了,java开发者被赶出团队,进来php开发者,只能硬改Project类了:
这里的坏处是,一旦项目变得复杂,Developer会越来越多,这样每次变动都会导致Project类必须修改.甚至后期有了新的需求,要求这个Developer可以根据需求随时更换,怎么办?
现在看有IOC的情况:
此时Project不再依赖于JavaDeveloper了,外部有一个xml来管理注入的内容,这里是片断:
此时,依赖关系被提到了Project的上层,这就是控制反转, 而各种Developer通过依赖注入的方式实现了这一目标.
顺便说一下,除了spring可以实现IOC,其实简单的IOC自己写点代码也能实现,无非是读配置生成对象再注入而已,除了JAVA的IOC,其他各种语言也都有IOC的解决方案.