Spring教程-Spring中的依赖注入
依赖注入(DI)是一种设计模式,它从编程代码中移除依赖关系,以便更轻松地管理和测试应用程序。依赖注入使我们的编程代码松耦合。为了更好地理解DI,让我们先了解依赖查找(DL):
依赖查找
依赖查找是一种在需要时获取资源的方法。有多种方式可以获取资源,例如:
A obj = new AImpl();
通过这种方式,我们直接使用new
关键字获取资源(A类的实例)。另一种方式是使用工厂方法:
A obj = A.getA();
这种方式,我们通过调用静态工厂方法getA()
来获取资源(A类的实例)。
另外,我们可以通过JNDI(Java命名目录接口)获取资源:
Context ctx = new InitialContext();
Context environmentCtx = (Context) ctx.lookup("java:comp/env");
A obj = (A)environmentCtx.lookup("A");
有多种方式可以获取资源,让我们看看这种方法存在的问题。
依赖查找的问题
依赖查找方法主要有两个问题:
- 紧耦合:依赖查找方法使代码紧耦合。如果资源发生变化,我们需要在代码中进行大量修改。
- 不利于测试:这种方法在测试应用程序时会产生很多问题,特别是在黑盒测试中。
依赖注入
依赖注入是一种设计模式,用于移除程序的依赖关系。在这种情况下,我们提供来自外部源(例如XML文件)的信息。这使得我们的代码松耦合且更易于测试。在这种情况下,我们编写代码如下:
class Employee {
Address address;
Employee(Address address) {
this.address = address;
}
public void setAddress(Address address) {
this.address = address;
}
}
在这种情况下,Address类的实例由外部来源(例如XML文件)通过构造函数或setter方法提供。
在Spring框架中执行依赖注入的两种方式
Spring框架提供两种注入依赖的方式:
- 通过构造函数
- 通过Setter方法
Spring依赖注入的下一个主题
构造函数依赖注入
让我们看看如何通过构造函数注入依赖。
Setter方法依赖注入
让我们看看如何通过Setter方法注入依赖。