依赖注入(Dependency Injection,DI)可以通过以下三种方式实现:
1.构造函数注入(Constructor Injection):通过在类的构造函数中声明依赖项,容器会在创建类的实例时将依赖项传递给构造函数。例如:
kotlinCopy codepublic class MyService {
private final MyDependency myDependency;
public MyService(MyDependency myDependency) {
this.myDependency = myDependency;
}
// 使用 MyDependency
}
2.属性注入(Property Injection):通过在类中声明依赖项的属性,并提供一个设置依赖项属性的方法,容器会在创建类的实例后,通过反射或其他方式设置依赖项的属性。例如:
public class MyService {
private MyDependency myDependency;
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
// 使用 MyDependency
}
3.方法注入(Method Injection):通过在类中声明一个设置依赖项的方法,容器会在创建类的实例后调用该方法并将依赖项传递给它。例如:
public class MyService {
private MyDependency myDependency;
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
public void doSomething() {
// 使用 MyDependency
}
}
无论使用哪种方式,依赖项的创建和维护都是由外部容器负责,以减少对象之间的紧耦合性和提高可重用性。通常,依赖注入模式使用第三方依赖注入框架来管理依赖项。常见的依赖注入框架包括Spring、Guice、Dagger等。