概述
依赖注入的本质是一种设计模式,它可以让一个对象或函数接收它所依赖的其他对象或函数,而不是自己创建或查找。这样可以实现控制反转,即将对象的构造和使用分离,从而提高程序的松耦合性。
举例说明
举个例子,假设有一个UserService类,它需要使用一个UserRepository类来访问数据库。如果没有使用依赖注入,UserService类可能会这样写:
public class UserService {
private UserRepository userRepository = new UserRepository();
// other methods
}
这样的问题是,UserService类和UserRepository类紧密耦合在一起,如果要更换UserRepository类的实现或者为UserService类编写测试代码,就很困难。
如果使用依赖注入,UserService类可以这样写:
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// other methods
}
这样的好处是,UserService类不再负责创建UserRepository类的实例,而是通过构造函数接收一个UserRepository类型的参数。这样就可以在运行时或测试时动态地为UserService类提供不同的UserRepository实现。