1. 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.
- 发展简介 略
2. IoC主要实现策略
来源:维基百科
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 into JavaBean properties or constructors. Use of JavaBean properties is called Setter Injection; use of constructor arguments is called Constructor Injection。
3. IoC容器的职责
维基百科:
Inversion of control serves the following design purposes:
- To decouple the execution of a task from implementation.
- To focus a module on the task it is designed for.
- To free modules from assumptions about how other systems do what they do and instead rely on contracts.
- To prevent side effects when replacing a module.
Inversion of control is sometimes facetiously referred to as the “Hollywood Principle: Don’t call us, we’ll call you”.