小马哥课程笔记
IoC 发展简介
什么是 IoC ?
In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to traditional control flow. In IoC, custom-written portions of a computer program receive the flow of control from a generic framework. A software architecture with this design inverts control as compared to traditional procedural programming: in traditional programming, the custom code that expresses the purpose of the program calls into reusable libraries to take care of generic tasks, but with inversion of control, it is the framework that calls into the custom, or task-specific, code.
来源:https://en.wikipedia.org/wiki/Inversion_of_control
IoC 的简史
- 1983年,Richard E. Sweet 在《The Mesa Programming Environment》中提出“Hollywood
Principle”(好莱坞原则) - 1988年,Ralph E. Johnson & Brian Foote 在《Designing Reusable Classes》中提出“Inversion
of control”(控制反转) - 1996年,Michael Mattsson 在《Object-Oriented Frameworks, A survey of methodological
issues》中将“Inversion of control”命名为 “Hollywood principle” - 2004年,Martin Fowler 在《Inversion of Control Containers and the Dependency Injection
pattern》中提出了自己对 IoC 以及 DI 的理解 - 2005年,Martin Fowler 在 《InversionOfControl》对 IoC 做出进一步的说明
IoC 主要实现策略
维基百科(https://en.wikipedia.org/wiki/Inversion_of_control)
Implementation techniques 小节的定义:
“In object-oriented programming, there are several basic techniques to implement inversion of control. These
are:
- Using a service locator pattern
- Using dependency injection, for example
- Constructor injection
- Parameter injection
- Setter injection
- Interface injection
- Using a contextualized lookup
- Using template method design pattern
- Using strategy design pattern”
《Expert One-on-One™ J2EE™ Development without EJB™》提到的主要实现策略:
“IoC is a broad concept that can be implemented in different ways. There are two main types:
- Dependency Lookup:
- The container provides callbacks to components, and a lookup context. This is the EJB and Apache Avalon approach. It leaves the onus on each component to use container APIs to look up resources and collaborators. The Inversion of Control is limited to the container invoking callback methods that application code can use to obtain resources.
- Dependency Injection:
- Components do no look up; they provide plain Java methods enabling the container to resolve dependencies. The container is wholly responsible for wiring up components, passing resolved objects in to JavaBean properties or constructors. Use of JavaBean properties is called Setter Injection; use of constructor arguments is called Constructor Injection.”