依赖注入(Dependency Injection,DI)是一种设计模式,用于实现对象之间的解耦。在依赖注入中,依赖关系不是由对象自己创建或控制,而是由外部容器(通常是一个框架或容器)来注入。
主要的依赖注入方式有三种:
-
构造器注入(Constructor Injection):
- 原理: 通过对象的构造函数来注入依赖。
- 优点: 构造器注入可以确保对象在创建时就具备了所需的依赖关系,使得对象的状态是不可变的。
- 示例:
public class MyClass {
private MyDependency myDependency;
// 构造器注入
public MyClass(MyDependency myDependency) {
this.myDependency = myDependency;
}
}
2.Setter方法注入(Setter Injection):
- 原理: 通过对象的Setter方法来注入依赖。
- 优点: Setter方法注入允许在对象创建后动态地注入依赖关系,灵活性较高。
- 示例
public class MyClass {
private MyDependency myDependency;
// Setter方法注入
public void setMyDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
}
3.接口注入(Interface Injection):
- 原理: 通过对象实现一个特定的接口来注入依赖。
- 优点: 接口注入较少被使用,通常情况下不如构造器注入和Setter方法注入灵活。
- 示例:
public interface DependencyInjector {
void injectDependency(MyClass myClass);
}
public class MyClass implements DependencyInjector {
private MyDependency myDependency;
// 接口注入
@Override
public void injectDependency(MyDependency myDependency) {
this.myDependency = myDependency;
}
}
在实际应用中,通常会选择构造器注入或Setter方法注入,具体选择取决于需求和设计偏好。 Spring框架等依赖注入容器通常支持这两种方式。