概述
在本文中,我们将介绍IoC
(控制反转)和DI
(依赖注入)的概念,以及如何在Spring
框架中实现它们。
什么是控制反转?
控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。
与传统编程相比,传统编程中我们的自定义代码调用库,而IoC使框架控制程序的流程并调用我们的自定义代码。为了实现这一点,框架使用具有附加行为的抽象。如果我们想要添加自己的行为,我们需要扩展框架的类或插入自己的类。
这种架构的优点是:
- 将任务的执行与其实现分离
- 更容易在不同实现之间切换
- 程序的更高的模块化
- 更容易通过隔离组件或模拟其依赖项来测试程序,并允许组件通过契约进行通信
我们可以通过各种机制实现IoC
,例如:策略设计模式、服务定位器模式、工厂模式和依赖注入(DI
)。
什么是依赖注入?
依赖注入是一种我们可以用来实现IoC
的模式,其中被反转的控制是设置对象的依赖项。
将对象与其他对象连接或将对象“注入”到其他对象中是由汇编程序而不是对象本身完成的。
下面是在传统编程中创建对象依赖关系的方法:
public class Store {
|
|
private Item item; |
|
public Store() {
|
|
item =new ItemImpl1(); |
|
} |
|
} |
在上面的示例中,我们需要在Store
类本身中实例化Item
接口的实现。
通过使用DI
,我们可以重写该示例,而不指定我们想要的Item
的实现:
public class Store {
|
|
private Item item; |
|
public Store(Item item) {
|
|
this.item = item; |
|
} |
|
} |
在接下来的几节中,我们将看看如何通过元数据提供Item的实现。
IoC
和DI
都是简单的概念,但它们对我们构建系统的方式有深刻的影响,因此值得充分理解。
Spring IoC容器
IoC
容器是实现IoC
的框架的常见特征。
在Spring
框架中,接口Applica